为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用NSJSONSerialization

如何使用NSJSONSerialization

子衿沉夜 2019-06-29 18:01:12
如何使用NSJSONSerialization我有一个JSON字符串(来自PHP的json_encode()看起来是这样的:[{"id": "1", "name":"Aaa"}, {"id": "2", "name":"Bbb"}]我想把它解析成iPhone应用程序的某种数据结构。我想对我来说最好的是有一个字典数组,所以数组中的第0元素是一个带键的字典。"id" => "1"和"name" => "Aaa".我不明白为什么NSJSONSerialization但是存储数据。到目前为止,这是我的代码:NSError *e = nil;NSDictionary *JSON = [NSJSONSerialization      JSONObjectWithData: data      options: NSJSONReadingMutableContainers      error: &e];这只是我在另一个网站上看到的一个例子。我一直在试着读一读JSON对象,方法是打印出元素的数量和类似的内容,但我总是得到EXC_BAD_ACCESS.我该如何使用NSJSONSerialization来解析上面的JSON,并将其转换为我提到的数据结构?
查看完整描述

3 回答

?
噜噜哒

TA贡献1784条经验 获得超7个赞

根json对象不是字典,而是数组:

[{"id": "1", "name":"Aaa"}, {"id": "2", "name":"Bbb"}]

这可能会让您清楚地了解如何处理它:

NSError *e = nil;NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &e];if (!jsonArray) {
  NSLog(@"Error parsing JSON: %@", e);} else {
   for(NSDictionary *item in jsonArray) {
      NSLog(@"Item: %@", item);
   }}


查看完整回答
反对 回复 2019-06-29
?
森林海

TA贡献2011条经验 获得超2个赞

这是我的代码,用于检查接收到的json是否为数组或字典:

NSError *jsonError = nil;id jsonObject = [NSJSONSerialization JSONObjectWithData:jsonData options:kNilOptions error:&jsonError];if ([jsonObject isKindOfClass:[NSArray class]]) {
    NSLog(@"its an array!");
    NSArray *jsonArray = (NSArray *)jsonObject;
    NSLog(@"jsonArray - %@",jsonArray);}else {
    NSLog(@"its probably a dictionary");
    NSDictionary *jsonDictionary = (NSDictionary *)jsonObject;
    NSLog(@"jsonDictionary - %@",jsonDictionary);}

我尝试过这些选项:kNilOptions和NSJSONReadingMutableContainers,并为两者正确工作。

显然,实际的代码不能以这种方式在if-ell块中创建NSArray或NSDicary指针。


查看完整回答
反对 回复 2019-06-29
?
月关宝盒

TA贡献1772条经验 获得超5个赞

对我有用。你的data对象可能是nil而且,正如rckoenes所指出的,根对象应该是一个(可变的)数组。请参阅以下代码:

NSString *jsonString = @"[{\"id\": \"1\", \"name\":\"Aaa\"}, {\"id\": \"2\", \"name\":\"Bbb\"}]";NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];NSError *e = nil;NSMutableArray *json = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&e];NSLog(@"%@", json);

(我不得不用反斜杠转义JSON字符串中的引号。)


查看完整回答
反对 回复 2019-06-29
  • 3 回答
  • 0 关注
  • 821 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信