从JSON对象向列表添加2个键值

时间:2011-03-03 15:36:57

标签: iphone objective-c json ios4

我想将来自JSON对象的2个键值附加到我的iPhone应用程序列表中。下面是我的代码,

SBJsonParser *jsonParser = [[[SBJsonParser alloc] init] autorelease];
    NSString *jsonString=[[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:@"http://test/json/json_data.php"]];

    id response = [jsonParser objectWithString:jsonString error:NULL];

    NSDictionary *feed = (NSDictionary *)response;
    list = (NSArray *)[feed valueForKey:@"fname"];

上面的代码正确显示了fname中的值,但如果我想为其添加lname,该怎么办?例如,我的对象是 [{ “FNAME”: “条例”, “L-NAME”: “琼斯”},{ “FNAME”: “约翰”, “L-NAME”: “雅各布”}] 我希望在列表中显示Bill Jones,John Jacobs等名称。目前它只显示Bill,John ..我尝试过像@“fname”@lname这样的东西,但它不会工作..任何人都可以帮助我..

1 个答案:

答案 0 :(得分:1)

观察:来自JSON解析器的响应不是字典,而是给定您传入的字符串的数组。您的代码有效,因为-valueForKey:是数组将响应的内容。该数组向每个元素发送-valueforKey:并从响应中构建一个数组。

有两种方法可以做你想要的(至少)

  1. 明确地遍历数组

    NSMutableArray* list = [[NSMutableArray alloc] init];
    for (id anObject in response)
    {
        [list addObject: [NSString stringWithFormat: @"%@ %@", 
                                                     [anObject objectForKey: @"fName"], 
                                                     [anObject objectForKey: @"lname"]]];
    }
    
  2. 向NSDictionary添加类别

    @interface NSDictionary(FullName)
    -(NSString*) fullName;
    @end
    
    @implementation NSDictionary(FullName)
    
    -(NSString*) fullName
    {
        return [NSString stringWithFormat: @"%@ %@", 
                                           [self objectForKey: @"fName"], 
                                           [self objectForKey: @"lname"]];
    }
    
    @end
    

    然后您现有的代码更改为

    list = (NSArray *)[feed valueForKey:@"fullName"];