如何从这个结构中获取数据,JSONKit

时间:2012-08-14 21:25:19

标签: iphone ios jsonkit

以下内容位于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"
                    }
                ]
             }      
        }
    ]
}

我要做的是idKeytitle以及budget

@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的一些信息,但我不能

有人可以帮助我如何访问和获取这些数据。

2 个答案:

答案 0 :(得分: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,就像你在问题中解决它一样,但如果你掌握了这个结构,那么对于用户属性你会更好(并且更有意义)是一个直接包含用户数据字典的数组。也许这就是你首先要做的事情,以及为什么你在获取数据时遇到了麻烦。

答案 1 :(得分:0)

当您将字符串转换为JSON对象时,它会生成一个树形结构的数据类型,其中包含可变的字典和数组。 NSJSONSerialization Class Documentation很好地总结了它。

我想如果你想访问例如列表中第一个用户的第一个名字,你需要编写方法调用:

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

我不确定我是否了解你的问题或解决了它。