Ios 将JSON提取到NSArray中进行动态导航

Ios 将JSON提取到NSArray中进行动态导航,ios,objective-c,nsarray,nsjsonserialization,Ios,Objective C,Nsarray,Nsjsonserialization,假设我有一个JSON对象: {"data":[{"stuff":[ {"onetype":[ {"id":1,"name":"John Doe"}, {"id":2,"name":"Don Joeh"} ]}, {"othertype":[ {"id":2,"company":"ACME"} ]}] },{"otherstuff":[ {"thing": [[1,42],[2,2]]

假设我有一个JSON对象:

{"data":[{"stuff":[
    {"onetype":[
        {"id":1,"name":"John Doe"},
        {"id":2,"name":"Don Joeh"}
    ]},
    {"othertype":[
        {"id":2,"company":"ACME"}
    ]}]
},{"otherstuff":[
    {"thing":
        [[1,42],[2,2]]
    }]
}]}
我怎样才能读入它,以便像这样访问它:

result.data[0].stuff[0].onetype[0]
我尝试了以下方法:

NSData *rawJSONdata = [NSData dataWithContentsOfURL:someURL];
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:rawJSONdata options:0 error:&error];
但是这会得到一个只有一个空对象的
NSArray

为了保持简单并继续使用NSJSONSerialization,您应该能够使用以下语法访问数据: 我猜您看到的问题与以下事实有关:因为JSON最外层的类型是对象而不是数组,所以示例中的结果是NSDictionary,而不是NSArray。您需要将解析代码更改为:

NSDictionary *result = [NSJSONSerialization JSONObjectWithData:rawJSONdata options:0 error:&error];
为了使用您建议的确切语法: 我所知道的最好的方法是JSON到对象映射框架。我找不到一个完全自动化的Objective-C解决方案(Java有一个名为Objective-C的解决方案),但它是一个Objective-C框架,提供了手动将NSDictionary转换为Object的能力

不过,NSJSONSerialization将始终使用以下映射:

  • 数组(也称为
    []
    )NSArray
  • 对象(aka
    {}
    )NSDictionary
  • 编号NSNumber
  • 字符串NSString
  • true
    /
    false
    NSNumber
  • null
    NSNull

没有否决投票,但作为助手,您确实不应该使用:
[NSData DATA WITH contents OFURL:
不再使用。@Mark,@troop231是正确的,苹果公司在文档中为您当前使用的方法推荐了
dataTaskWithURL:completionHandler:
,用于网络请求。现在回到您的问题,您是否检查了
rawJSONdata
的内容以确保它具有正确的JSON?首先你需要做的是认识到你有一个字典,而不是一个数组。去json.org学习json语法,然后了解json数组匹配NSArray,而json“对象”匹配NSDictionary。
NSDictionary *result = [NSJSONSerialization JSONObjectWithData:rawJSONdata options:0 error:&error];