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 对象的嵌套结构中,用户是您帐户的属性。该对象是一个字典,它有一个属性“user”,它是一个数组。该数组的每个元素都是一个具有四个属性的对象:id、first_name、last_name 和 is_owner。

所以当你解析你的对象时,它只是一堆嵌套的 NSDictionaries 和 NSArrays。你可以这样做:

...
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 回答