-1

我会保持简短。我正在使用此代码将 JSON 从本地文件解析为对象数组:

-(void)populateData
{
    NSString* sourcePath = [[NSBundle mainBundle]pathForResource:@"ships" ofType:@"json"];

    //get json string
    NSString* JSONData = [[NSString alloc] initWithContentsOfFile:sourcePath encoding:NSUTF8StringEncoding error:nil];

    NSData* data = [JSONData dataUsingEncoding:NSUTF8StringEncoding];

    //put json in array
    ships = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
    NSLog(@"%@", ships);
}

(注:为简洁起见只展示了一个,每个有大约20个条目)

此方法适用于格式如下的 JSON:

[
  {
  "name": "Santa Maria",
  "operator": "Kingdom of Spain",
  "flag": "flag_spain"
  }
  ]

它为 JSON 格式返回 null,如下所示:

[
  {
  "name": "Santa Maria",
  "operator": "Kingdom of Spain",
  "flag": "flag_spain",
  "launched": "November 19, 1890",
  "fate": "Destroyed in Havana, Cuba in Feburary 1898."
  "cost":"$4,677,788.75",
  "image": "maine_img",
  "image_attribution": "Image is in the public domain."
  }]

我一点也不知道为什么较小的有效而较大的无效。任何帮助,将不胜感激。

4

3 回答 3

3

后面少了一个逗号:

  "fate": "Destroyed in Havana, Cuba in Feburary 1898."
于 2013-05-08T22:48:21.803 回答
2

这是由于这一行的语法错误:

"fate": "Destroyed in Havana, Cuba in Feburary 1898."

(末尾缺少逗号)

有一些工具可以发现这种错误。例如,http://jsonlint.com。这个似乎有更好的错误消息http://jsonformatter.curiousconcept.com/

于 2013-05-08T22:52:34.180 回答
0

对不起,但是从 NSData 转换为 NSString 然后再转换回 NSData 是没有意义的。只需调用 dataWithContensOfFile: 并完成它。

于 2014-04-10T12:32:38.343 回答