【问题标题】:how to get data from this structure, JSONKit如何从这个结构中获取数据,JSONKit
【发布时间】:2012-08-14 21:25:18
【问题描述】:

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

为了得到idKeytitlebudget 我正在做的是

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

谁能帮助我如何访问和获取这些数据。

【问题讨论】:

  • 您是否假设users 是一个数组?它不在上面给定的 JSON 中,它是一个对象 (NSDictionary)。

标签: iphone ios jsonkit


【解决方案1】:

访问用户数据的方式与访问帐户数据的方式相同。在 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,因为我没有注意到users 也是另一本字典。谢谢你的帮助..
【解决方案2】:

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

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

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

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

【讨论】:

  • 应该是[[[[acc objectForKey:@"users"] objectForKey:@"user"] objectAtIndex:0] objectForKey@"first_name"]]
  • 对,因为“用户”是一个数组。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 2022-10-23
  • 1970-01-01
  • 1970-01-01
  • 2019-04-29
  • 2021-04-23
  • 2021-09-28
相关资源
最近更新 更多