0

私は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、および質問番号のプロパティを含むオブジェクトの配列になってしまうことです。

何かアドバイス?

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

IF you are using iOS 5 (for an iOS app) or OS 10.7 (for a Mac app), then the NSJSONSerialization class is built right in:

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

This will work whenever the myData object (an NSData instance) contains a valid JSON string using one of the supported JSON encodings, and the top-level element of that JSON string is an array as it is in your example.

When you do this with your example JSON string, you should get an NSArray containing 5 dictionaries. So you could do something like this:

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];
}

The above assumes you've defined a class called MyClass with properties called text, questionNumber, and id.

于 2012-07-10T04:10:06.117 に答える