数组可以是顶级JSON对象吗? (目标C,Stig Brautaset的图书馆)

时间:2012-03-31 04:14:19

标签: iphone json

我正在编写一个Objective C / iOS模块,使用Stig Brautaset的JSON库将文本文件解析为JSON字典。

是否有一种简单的方法可以将单个JSON文件解析为字典对象数组,还是必须创建一个字典对象并将不同的对象拉出来?

作为背景我目前正在使用多个文件,每个对象一个。我的JSON文件看起来像这样:

{
 "colorname": "red",
 "foos": [
   {
    "type": "cherry",
    "category": "fruit"
   },
   {
    "type": "redvines",
    "category": "bar"
   }
 ]
}

{
 "colorname": "green",
 "foos": [...]
}

{
 "colorname": "blue",
 "foos": [...]
}

我的解析功能如下:

NSMutableArray *fooColors = [[[NSMutableArray alloc] init] autorelease] 

for (NSString *thisFile in fileList) { 
  NSString *entireFile = [NSString stringWithContentsOfFile:thisFile
                              encoding:NSUTF8StringEncoding
                              error:nil];
  NSDictionary *fooList = (NSDictionary*)[entireFile JSONValue];
  [fooColors addObject:dataObject];
}

但我宁愿将所有JSON对象放在一个文件中。我会在这样的顶级词典中完成所有这些吗?

{
 "colors": [
   {
    "colorname": "red",
    "foos": [
      {
       "type": "cherry",
       "category": "fruit"
      },
      {...}
    ]
   },
   {"colorname": "green",
    "foos":[...]
   },
   {"colorname": "blue",
    "foos":[...]
   },
   *etc.*
 ]
}

是否有更简单的方法可以省去JSON文本的前两行和最后两行并将其作为字典对象数组读取?如果是这样,解析函数会是什么样的?

如果这是一个新手问题,请提前道歉。

1 个答案:

答案 0 :(得分:1)

JSON中最外层的对象可以是一个数组。它不一定是记录/字典。 SBJSON将向您返回NSArray。

[
   {
    "colorname": "red",
    "foos": [
      {
       "type": "cherry",
       "category": "fruit"
      },
      {...}
    ]
   },
   {"colorname": "green",
    "foos":[...]
   },
   {"colorname": "blue",
    "foos":[...]
   },
   *etc.*
 ]