2012-03-31 12 views
2

我正在编写一个Objective C/iOS模块来使用Stig Brautaset的JSON库将文本文件解析为JSON字典。数组可以是顶级JSON对象吗? (在目标C中,Stig Brautaset的库)

是否有一种简单的方法将单个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

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

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