如何使用 SBJson 和 Objective-C 解析和提取嵌套的 JSON 响应

Posted

技术标签:

【中文标题】如何使用 SBJson 和 Objective-C 解析和提取嵌套的 JSON 响应【英文标题】:How To Parse And Extract Nested JSON Response Using SBJson And Objective-C 【发布时间】:2011-08-13 03:56:00 【问题描述】:

谁能告诉我如何从下面的 JSON 响应中解析和提取数据节点,即 CM、Dozen、Foot...,以便它可以用作 UITableView 的数据源?

success: true, dataCount: 11, data: ["unitName":"CM","unitName":"Dozen","unitName":"Foot","unitName":"Gross","unitName":"Inch","unitName":"K","unitName":"KG","unitName":"LB","unitName":"Piece","unitName":"Set","unitName":"Yard"]

在此先感谢您的帮助。

干杯

更新...

Oli 和 Srika,你们太有帮助了!

下面是我的代码...

NSString *myRawJson = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://192.168.0.100/myApp/getUnitInJson.php"]]; //myRawJson 响应如下 success: true, dataCount: 5, data: ["unitName":"CM","unitName":"Dozen","unitName":"Foot","unitName":"Gross" ,"unitName":"英寸"] SBJsonParser *parser = [[SBJsonParser alloc] init]; NSArray *myParsedJson = [[解析器 objectWithString:myRawJson 错误:nil] 复制]; NSArray *myExtractedData = [myParsedJson valueForKey:@"data"]; NSLog(@"RawJsonString: %@", myRawJson); // 输出:RawJsonString: data:["unitName":"CM","unitName":"Inch","unitName":"Foot","unitName":"Yard", ] NSLog(@"myExtractedData 计数:%@", [myExtractedData 计数]); // 输出:myExtractedData 计数:(null)

myExtractedData 中没有任何内容。我做错什么了吗?

请帮忙。

【问题讨论】:

【参考方案1】:

您是否让用户在 UITableView 中添加/修改数组,这就是您需要它可变的原因吗?

无论如何,您可以这样做:从“wholeResponse”字典访问数据数组,然后将该数组转换为可变数组。

NSArray *data = [wholeResponse valueForKey:@"data"];
NSMutableArray *mutableData = [NSMutableArray arrayWithArray:data];

// Do something with the mutable data.

【讨论】:

您好奥利,感谢您的快速回复。我刚刚更新了我的问题。请检查一下并帮助我。【参考方案2】:

从整个NSDictionary 中获取data - NSArray values = [data objectForKey:@"data"]。 这给出了与data 关联的NSArray

要获得 CM 试试这个 -NSString *CM = [[values objectAtIndex:0] objectForKey:@"unitName"] Dozen,Foot 也是如此。等等

然后您可以将此数据放入UITableView

更新:试试这个。我假设您使用 this 作为 JSON 解析器。

NSDictionary *myParsedJson = [myRawJson JSONValue];
NSArray *myExtractedData = [myParsedJson valueForKey:@"data"];
NSLog(@"myExtractedData Count: %@", [myExtractedData count]);

【讨论】:

Srikar,非常感谢您的快速回复。但是 NSMutableArray 有 getObjectForKey 方法吗?我似乎找不到它。 对不起,错字!!。应该是objectForKeyNSDictionary Srikar,我刚刚更新了我的问题。请看看它并帮助我。 @Wong,这不是NSArray *myParsedJson 错了吗?不应该是NSDictionary吗? 我只是改成NSDictionary *myParsedJson,结果还是一样的。

以上是关于如何使用 SBJson 和 Objective-C 解析和提取嵌套的 JSON 响应的主要内容,如果未能解决你的问题,请参考以下文章

JSON 子级别提取 - 如何? Objective-C

使用 SBJSON 解析和检查 JSON

Objective-C字符串处理问题

Objective-C - 比较整数不能按预期工作

Objective-C 有没有办法判断一个对象是不是设置为自动释放?

不要使用SBJSON(json-framework)