Ios 我应该如何从json字符串中读取数据?苹果手机

Ios 我应该如何从json字符串中读取数据?苹果手机,ios,json,nsdata,type-conversion,Ios,Json,Nsdata,Type Conversion,在一个NSString“[{“van”:1312,“vuan”:12123}]中,为了获得每个键的值,我做了以下操作: NSData *data1 = [jsonResponse1 dataUsingEncoding:NSUTF8StringEncoding]; jsonArray = [NSJSONSerialization JSONObjectWithData:data1 options:kNilOptions error:&err]; self.van =

在一个
NSString“[{“van”:1312,“vuan”:12123}]
中,为了获得每个键的值,我做了以下操作:

    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;
    }
可能我不必使用数组,而是直接在
NSDictionary
中转换
NSData

无论如何,我不明白为什么
jsonArray
nil
,尽管
jsonResponse1
包含我上面写的值


编辑:我的老板把json字符串写错了。谢谢大家的建议!:)

你的json无效。请修复它。这个网站是你的朋友


您需要更加防御性地编写代码,并且需要在发现错误时报告错误

首先检查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");
    }
}

总之:运行时错误会发生,所以您需要确保自己能够处理它们。当它们发生时,您需要报告尽可能多的信息,以便您能够诊断和修复它们。

NSError
对象说明了些什么?“对象中的值在字符20附近没有字符串键。”