簡體   English   中英

iOS-如何檢查SBJson創建的JSON NSData?

[英]IOS - How can I inspect the JSON NSData the SBJson creates?

我正在嘗試將一些簡單的JSON發布到RESTful服務。 我想形成一個采用以下形式的json字符串:

{username:"someuser",password:"somepassword"}

我的POST在服務器上一直失敗,抱怨POST值不存在。 但是,如果我創建JS測試實現,則相同的服務可以正常工作。 所以我很確定這是我的SBJson客戶端實現。

NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
                          userName,@"username",
                          password, @"password",
                          nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSData *jsonData = [writer dataWithObject:userDict];    

jsonData似乎有大小,但是它嘗試使用SBJson對其進行序列化,但失敗了,我得到nil。

NSString *test = [writer stringWithObject:jsonData]; // returns nil

我正在嘗試將以上內容發布到NSMutableURLRequest中。 如果可以幫助提供上下文,這是我的實現:

-(void)registerUserName:(NSString *)userName andPassword:(NSString *)password{
responseData = nil;
responseData = [NSMutableData data];
NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
                          userName,@"username",
                          password, @"password",
                          nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSData *jsonData = [writer dataWithObject:userDict];
NSString *test = [writer stringWithObject:jsonData]; //always nil
NSURL *url = [[NSURL alloc] initWithString:@"http://localhost/~user/app_web/index.php/user/create"];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"POST"];
[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"application/json" forHTTPHeaderField:@"Accept"];
[request addValue:@"form-data" forHTTPHeaderField:@"Content-Disposition"];
[request setHTTPBody:jsonData];
[[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:YES ];
currentRequestType = REGISTER_USER;
NSURLConnection *connection =[[NSURLConnection alloc]initWithRequest:request delegate:self]; 

謝謝!

更新

使用下面的建議,我現在這樣做:

NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
                              userName,@"username",
                              password, @"password",
                              nil];



     NSString *jsonString = [userDict JSONRepresentation];
    NSData *jsonData = [jsonString dataUsingEncoding];
    [request setHTTPBody:jsonData];
        [[UIApplication sharedApplication]setNetworkActivityIndicatorVisible:YES ];
        currentRequestType = REGISTER_USER;
        NSURLConnection *connection =[[NSURLConnection alloc]initWithRequest:request delegate:self];

不幸的是,在服務器上仍找不到我發布的值。 我認為我的NSMutableURLRequest一定有問題。

我在后端使用CodeIgniter。 該動作如下所示:

public function create(){
    if($this->input->post('username') && $this->input->post('password')){
        $username = $this->input->post('username');
        $password = $this->input->post('password');
        $this->load->model('User_model','users');
        $status = $this->users->add_user($username,$password);
        if($status){
            echo json_encode(array('success'=>true));
        } else{
            echo json_encode(array('success'=>false));
        }
    }
     echo json_encode(array('success'=>false)); // when posting I arrive here
}

要序列化字典userDict請調用以下方法。

NSString* jsonString = [userDict JSONRepresentation];

如果要使用NSData表示形式,可以使用以下方法

NSData* jsonData = [jsonString dataUsingEncoding:NSUTF8Encoding];

嘗試這個:

NSDictionary *userDict = [[NSDictionary alloc] initWithObjectsAndKeys:
                      userName,@"username",
                      password, @"password",
                      nil];
SBJsonWriter *writer = [[SBJsonWriter alloc]init];
NSString *test = [writer stringWithObject:userDict]; 

別忘了釋放它們

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM