0

以下はjson.txtにあるコンテンツです

{
    "data": [
        {
            "keyId": 3,
            "title": "This is a fundraiser 1",
            "budget": "1000",
            "users": {
                "user": [
                    {
                        "id": "3",
                        "first_name": "A1",
                        "last_name": "A11",
                        "is_owner": "false"
                    },
                    {
                        "id": "2",
                        "first_name": "B1",
                        "last_name": "B11",
                        "is_owner": "true"
                    }
                ]
             }      
        }
    ]
}

私が取得するために行っていることidKeyとはtitlebudget

@implementation Account
@synthesize arr;
-(void)parse {
             NSString *filePath    =   [[NSBundle mainBundle] pathForResource:@"fundraiser_json" ofType:@"txt"];
             NSString *jsonString  =   [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:nil];

             NSDictionary    *dict =   [jsonString objectFromJSONString];
             self.arr              =   [dict objectForKey:@"data"];

             for ( NSDictionary  *acc in self.arr ) {

                 Account  *account     =   [[Account alloc] init];

                 [account setKeyID:   [acc objectForKey:@"keyId"]];
                 [account setTitle:   [acc objectForKey:@"title"]];
                 [account setBudget:  [acc objectForKey:@"budget"]]; 
             } 
    }       

users次に、それぞれの情報にアクセスして取得しようとしていますが、できませuser

誰かがこれらのデータにアクセスして取得する方法を教えてもらえますか?

4

2 に答える 2

3

ユーザーデータにアクセスする方法は、アカウントデータにアクセスする方法と同じです。JSONオブジェクトのネストされた構造では、usersはアカウントのプロパティです。そのオブジェクトは、配列である「user」という1つのプロパティを持つ辞書です。その配列の各要素は、id、first_name、last_name、およびis_ownerの4つのプロパティを持つオブジェクトです。

したがって、オブジェクトを解析するとき、それはネストされたNSDictionariesとNSArrayの集まりにすぎません。あなたはこのようにそれを行うことができます:

...
for ( NSDictionary  *acc in self.arr ) {

    NSDictionary *users = (NSDictionary*)[acc objectForKey:@"users"];
    NSArray *userArray = (NSArray*)[users objectForKey:@"user"];

    for (NSDictionary *user in userArray) {
        NSString *id = [user objectForKey:@"id"];
        NSString *firstName = [user objectForKey:@"first_name"];
        // etc.
    }
 }

編集:私はあなたの質問であなたが持っている方法であなたのJSONを解析するためにこの答えを書きました、しかしあなたがこの構造を制御できるならあなたはusersプロパティがユーザーデータディクショナリが直接含まれています。おそらくそれがあなたが最初にやろうとしていたことであり、データの取得に問題があった理由です。

于 2012-08-14T22:48:42.353 に答える
0

文字列をJSONオブジェクトに変換すると、可変の辞書と配列を使用して、ツリー構造のデータ型になります。NSJSONSerializationクラスのドキュメントはそれをかなりうまく要約しています。

たとえば、リストの最初のユーザーの名にアクセスする場合は、メソッド呼び出しを記述する必要があると思います。

[[[[acc objectForKey:@"users"] objectForKey:@"user"] objectForKey:@"first_name"] objectAtIndex:0];

私はあなたの問題を理解したか、それがそれを解決するかどうかはわかりません。

于 2012-08-14T21:45:29.267 に答える