2012-07-10 65 views
0

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

这是一个被活塞所产生的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,文字和题号属性对象的数组结束。

有什么建议吗?

+0

尝试__eval__虽然不推荐。 – Rohan 2012-07-10 04:08:40

回答

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。

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]]; 
+0

现在大家都在使用内置的NSJSONSerialization类吗? – Stew 2012-07-10 04:13:53