解析没有顶级标签的JSON

时间:2012-07-10 03:52:08

标签: objective-c django json

我正在使用django-piston并在Objective-C中解析JSON输出,但由于输出不包含任何顶级标签而遇到一些麻烦。我遇到的每个例子都将数据解析成字典,然后基于objectForKey生成一个数组:@“foo”但在我的情况下,我没有基于的解析顶级文本。

以下是Piston生成的JSON:

[
{
    "text": "Pain Intensity", 
    "question_number": 1, 
    "id": 1
}, 
{
    "text": "Personal Care (washing, dressing, etc.)", 
    "question_number": 2, 
    "id": 2
}, 
{
    "text": "Lifting", 
    "question_number": 3, 
    "id": 3
}, 
{
    "text": "Walking", 
    "question_number": 4, 
    "id": 4
}, 
{
    "text": "Sitting", 
    "question_number": 5, 
    "id": 5
}

我想要做的是最终得到一个包含id,text和question number属性的对象数组。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

我已使用此library。它非常简单实用。对于教程,请查看此site

解析代码的示例就是这样,您只需要导入"JSON.h"文件:

    NSString *jsonPath = [[NSBundle mainBundle] pathForResource:FILE_NAME ofType:FILE_EXTENSION];
    NSString *jsonString = [NSString stringWithContentsOfFile:jsonPath encoding:NSUTF8StringEncoding error:nil];
    NSArray *jsonArray = [NSArray arrayWithArray:[jsonString JSONValue]];

答案 1 :(得分:1)

如果您使用的是iOS 5(适用于iOS应用)或OS 10.7(适用于Mac应用),则NSJSONSerialization类内置于:

NSArray *parsedJSON = [JSONObjectWithData:myData options:myOptions error:&error];

只要myData对象(NSData实例)包含使用其中一种受支持的JSON编码的有效JSON字符串,并且该JSON字符串的顶级元素就是您的示例中的数组,这将起作用。

当您使用示例JSON字符串执行此操作时,您应该获得包含5个字典的NSArray。所以你可以这样做:

NSMutableArray *newArray = [[NSMutableArray alloc] init];
for (int i = 0; i < [parsedJSON count]; i++) {
    MyClass *newObject = [[MyClass alloc] init];
    NSDictionary *questionDict = [parsedJSON objectAtIndex:i];
    [myObject setText:[questionDict objectForKey:@"text"]];
    [myObject setQuestionNumber:[questionDict objectForKey:@"question_number"]];
    [myObject setID:[questionDict objectForKey:@"id"]];
    [newArray addObject:newObject];
}

以上假设您已经定义了一个名为MyClass的类,其中包含名为text,questionNumber和id的属性。