我有一个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
包含我上面写的值。
答案 0 :(得分:13)
您的JSON无效。修理它。这个网站是你的朋友。
答案 1 :(得分: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");
}
}
总而言之:将发生运行时错误,因此您需要确保处理它们。当它们发生时,您需要尽可能多地报告它们,以便您可以诊断和修复它们。