如何使用来自 NSString 的 NSJSONSerialization 解析 Json [重复]

Posted

技术标签:

【中文标题】如何使用来自 NSString 的 NSJSONSerialization 解析 Json [重复]【英文标题】:How to Parse Json with NSJSONSerialization from NSString [duplicate] 【发布时间】:2014-07-13 19:08:40 【问题描述】:

我正在使用 NSURLSessionNSURLSessionDataTask 发送一个发布请求,然后获取响应并将其存储在一个 NSString 变量中,然后记录它。我现在的功能是这样的:

 NSURLSessionConfiguration *defaultConfigObject = [NSURLSessionConfiguration defaultSessionConfiguration];
     NSURLSession *defaultSession = [NSURLSession sessionWithConfiguration: defaultConfigObject delegate: nil delegateQueue: [NSOperationQueue mainQueue]];

     NSURL * url = [NSURL URLWithString:@"http://mysite.org/mobile_app/studentregister.php"];
     NSMutableURLRequest * urlRequest = [NSMutableURLRequest requestWithURL:url];
     NSString * params = [NSString stringWithFormat:@"username=%@&displayname=%@&password=%@&passwordc=%@&email=%@&teachercode=%@", username, displayname, password, passwordc, email, teacherCode];
     [urlRequest setHTTPMethod:@"POST"];
     [urlRequest setHTTPBody:[params dataUsingEncoding:NSUTF8StringEncoding]];

     NSURLSessionDataTask * dataTask =[defaultSession dataTaskWithRequest:urlRequest
     completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) 
     NSLog(@"Response:%@ %@\n", response, error);
     if(error == nil)
     
     NSString * text = [[NSString alloc] initWithData: data encoding: NSUTF8StringEncoding];
     NSLog(@"Json = %@",text);

     

     ];
     [dataTask resume];

当我运行请求时,它会在调试终端中返回以下内容:

Json = "userCharLimit":"Your username must be between 5 and 25 characters in length""displaynameCharLim":"Your displayname must be between 5 and 25 characters in length""passLimit":"Your password must be between 8 and 50 characters in length""emailInvalid":"Not a valid email address""teacherCodeLength":"Your teacher code is not 5 to 12 characters"

我怎么知道使用NSJSONSerialization 解析这个?这甚至可以被解析还是我在 php 上要做一些格式化?这是我的第一个网络服务。

【问题讨论】:

【参考方案1】:

NSJSONSerialization 使用 NSData 而不是 NSString。

更换你的线路...

NSString *text = [[NSString alloc] initWithData...

有了这样的东西......

NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

字典对象现在将成为 JSON 的表示形式。

这取决于 JSON 是否正确 :-)

此外,这个问题之前已经被问过数百次了。

【讨论】:

我得到 Dictionary is null【参考方案2】:
NSMutableDictionary *json=[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error];

【讨论】:

以上是关于如何使用来自 NSString 的 NSJSONSerialization 解析 Json [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何从 NSString 中获取值

无法序列化 JSON Objective-c

使用 RESTkit 从 JSON 映射来自 NSManagedObject 的 NSString 数组

来自 NSString 的 UITableViewCell 笔尖

为啥来自 NSString 分配的 NSDecimalNumber 会失败?

来自 NSString 的 Objective-C 标识符