JSON解析问题

Posted

技术标签:

【中文标题】JSON解析问题【英文标题】:JSON Parsing Issue 【发布时间】:2014-05-13 07:11:03 【问题描述】:

您好,我是 ios 开发的新手。我正在尝试解析 JSON 响应。以下是响应的顶部:

Table =                     

  Rows = 
  results = (
            
  Cells =    
      results = (
              
                Key = Rank;
                Value = "6.251145362854";
                ValueType = "Edm.Double";
                "__metadata" =  
                                 type = "SP.KeyValue";
                                 ;
                                ,
              
                Key = DocId;
                Value = 978473;
                ValueType = "Edm.Int64";
                 "__metadata" =                               
              
                type = "SP.KeyValue";
              ;
              ,
              
              Key = WorkId;
              Value = 978473;
              ValueType = "Edm.Int64";
              "__metadata" =  
                               type = "SP.KeyValue";
                               ;
              ,
            
             Key = Title;
             Value = "Vneea Ready!";
             ValueType = "Edm.String";
             "__metadata" =                                              
             
                type = "SP.KeyValue";
              ;
             ,.........................

现在我正在使用

    NSError *error;
    NSDictionary *jsonObject = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:&error];
NSDictionary *results = jsonObject[@"Table"][@"Rows"][@"results"];

所以我能够将它完善到这里,但后来我使用了

NSDictionary *results = jsonObject[@"Table"][@"Rows"][@"results"][@"Cells"];

当我为Cellsresults 走得更远时,它给了我Empty element Error, 参考这篇帖子JSON parsing using NSJSONSerialization in iOS后,似乎“(”在响应中表示一个数组,但它对我不起作用。有人可以帮助我吗?

【问题讨论】:

你能给你的网址吗,我给你完整的答案 这看起来不像 json。每个结果条目都有“;”而不是“,”,所有“=”都应该是“:” 请指定解析后要从字典中获取哪个值? 我想从字典中得到的标题值。 【参考方案1】:

results 是一个数组,而不是字典,因此您无法通过名称访问其内容。不过,您的 JSON 格式看起来不太好,因为 Key 应该是一个字符串(“Title”而不是 Title)。

结果数组中的每个元素都是一个字典,因此要获取与Title 对应的Value,您可以使用

NSArray *results=jsonObject[@"Table"][@"Rows"][@"results"];
NSDictionary *result=[results objectAtIndex:0];   // access the first result

for (NSDictionary *result in results) 
   if ([result[@"Key"] isEqualToString:@"Title"]) 
      NSLog(@"The value of Title is %@",result[@"Value"]);
      break;
   

【讨论】:

以上是关于JSON解析问题的主要内容,如果未能解决你的问题,请参考以下文章

Gson 解析 json串过长就报错,解析10条没问题,解析20条就错

json解析失败怎么解决?

怎么用程序解析一个json文件

Flutter -- JSON解析

JSON 解析,嵌套 JSON 结构的问题

Hive解析Json数据