0

我正在使用 django-piston 并在 Objective-C 中解析 JSON 输出,但是由于输出不包含任何顶级标签而遇到了一些麻烦。我遇到的每个示例都将数据解析为字典,然后根据 objectForKey:@"foo" 生成一个数组,但就我而言,我没有要解析的顶级文本。

这是活塞生成的 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、文本和问题编号属性的对象数组。

有什么建议吗?

4

2 回答 2

2

我用过这个 。这是非常简单和有用的。对于教程,请查看此站点

解析代码的示例是这样的,您只需要导入"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]];
于 2012-07-10T04:00:16.603 回答
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。

于 2012-07-10T04:10:06.117 回答