我正在使用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属性的对象数组。
有什么建议吗?
答案 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的属性。