我应该如何从 json 字符串中读取数据?苹果手机
Posted
技术标签:
【中文标题】我应该如何从 json 字符串中读取数据?苹果手机【英文标题】:How should I read the data from a json string? iphone 【发布时间】:2013-02-22 07:41:52 【问题描述】:我有一个NSString "["van" : 1,312, "vuan":12,123]
,为了获得每个键的这个值,我这样做:
NSData *data1 = [jsonResponse1 dataUsingEncoding:NSUTF8StringEncoding];
jsonArray = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&err];
self.van = [NSMutableArray arrayWithCapacity:1];
self.vuan = [NSMutableArray arrayWithCapacity:1];
for (NSDictionary *json in jsonArray)
NSString * value = [json objectForKey:@"van"];
[self.van addObject:value];
lbl1.text = value;
NSString * value1 = [json objectForKey:@"vuan"];
[self.vuan addObject:value1];
lbl4.text = value1;
可能我不必使用数组而是直接将NSData
转换为NSDictionary
。
无论如何,我不明白为什么jsonArray
是nil
,尽管jsonResponse1
包含我上面写的值。
编辑:我的老板写错了 json 字符串。谢谢大家的建议!:)
【问题讨论】:
那么NSError
对象说明了什么?
"对象中字符 20 附近的值没有字符串键。"
【参考方案1】:
您需要更加防御性地编写代码,并且需要在发现错误时报告错误。
首先检查JSON解析是否失败,如果是则报错:
NSData *data1 = [jsonResponse1 dataUsingEncoding:NSUTF8StringEncoding];
jsonArray = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&err];
if (jsonArray == nil)
NSLog(@"Failed to parse JSON: %@", [err localizedDescription]);
return;
其次,如果这些键不在 JSON 中,objectForKey:
将返回 nil
,当您尝试将其添加到数组时,它会抛出异常,这是您要避免的:
for (NSDictionary *json in jsonArray)
NSString * value = [json objectForKey:@"van"];
if (value != nil)
[self.van addObject:value];
lbl1.text = value;
else
NSLog(@"No 'van' key in JSON");
NSString * value1 = [json objectForKey:@"vuan"];
if (value1 != nil)
[self.vuan addObject:value1];
lbl4.text = value1;
else
NSLog(@"No 'vuan' key in JSON");
总而言之:运行时错误会发生,因此您需要确保处理它们。当它们发生时,您需要尽可能多地报告它们,以便诊断和修复它们。
【讨论】:
【参考方案2】:您的 JSON 无效。修理它。这个网站是你的朋友。
http://jsonlint.com/
【讨论】:
以上是关于我应该如何从 json 字符串中读取数据?苹果手机的主要内容,如果未能解决你的问题,请参考以下文章
我应该如何有效地在 Android 手机上的服务器之间发送 JSON 数据?