我应该如何从 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

无论如何,我不明白为什么jsonArraynil,尽管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 数据?

如何从 Android 读取 MYSQL 数据库?

NSDate 被自动释放导致 Bad exe 错误。苹果手机

如何从 gzip 读取 json 字符串

苹果手机怎么投屏 如何操作

PHP如何把数据写入JSON文件并在另一PHP文件读取JSON数据?