【问题标题】:Getting Null values when accessing JSON data from Objective C从 Objective C 访问 JSON 数据时获取 Null 值
【发布时间】:2012-01-26 02:35:36
【问题描述】:

我有以下 JSON 数据试图在 Objective C 中解析 - 我的代码返回低级对象值的空值 - 用户 ID、名字和姓氏

完整的 JSON 是:

{
  "members" :
    [
      {"member" : {"userid":"1","FirstName":"ramesh","LastName":"babu"}},
      {"member" : {"userid":"2","FirstName":"ramesh2","LastName":"babu2"}},
      {"member" : {"userid":"3","FirstName":"ramesh3","LastName":"babu3"}}
    ]
}

我的代码是:

- (void)viewDidLoad
{
    [super viewDidLoad];

    dispatch_async(kBgQueue, ^{
        NSData* data = [NSData dataWithContentsOfURL: kLatestKivaLoansURL];
        [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];
    });
}

- (void)fetchedData:(NSData *)responseData {
    //parse out the json data
    NSError* error;
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData //1
                                                         options:kNilOptions 
                                                           error:&error];

    NSArray* members = [json objectForKey:@"members"]; //2


    NSString *text1 = [json description];
    jsonSummary.text = text1;

    NSEnumerator *e = [members objectEnumerator];
    NSArray *keys = [NSArray arrayWithObjects:@"userid", @"FirstName", @"LastName", nil];

    NSDictionary * member;
    while (member  = (NSDictionary *)[e nextObject]) {
        // do something with object
        // Iterate it
        text1 = [member description];
        NSLog(@"MEMBER ROW DATA%@", text1);
        for (id key in keys) {

            text1 = [member description];
            NSLog(@"key: %@   value:%@ ", key, [member objectForKey:key]);

        }

    }
}

任何帮助将不胜感激!

【问题讨论】:

    标签: objective-c json parsing key


    【解决方案1】:

    根据示例 JSON 数据,“members”数组包含字典,每个字典都有一个键“member”。 “member”键的值包含具有较低级别成员数据的字典。

    您的代码假定具有较低级别值的字典是数组元素,但它们不是。

    您需要先获取“成员”键值,然后获取较低级别的值。

    改变这一行:

    NSLog(@"key: %@   value:%@ ", key, [member objectForKey:key]);
    

    到:

    NSLog(@"key: %@   value:%@ ", key, 
        [[member objectForKey:@"member"] objectForKey:key]);
    

    应该这样做,但我会稍微更改变量名称以减少混乱。

    【讨论】:

    • 安娜,谢谢,我得到了键值,发现成员字典里面有“成员”对象。以下是有效的代码。
    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多