迭代嵌套的JSON数组iPhone

时间:2012-01-05 08:56:35

标签: iphone objective-c xcode json cocoa

我有这样的json feed:

 {
result = {
  cars =  {
        brand = {
             fields = {
       name = {
        id = 1234;
                        value = "Opel Astra";
           };
     description = {
        id = 4432;
        value = "Some description"; 
    };
           };
      fields = {
       name = {
        id = 1453;
                        value = "Opel Omega";
           };
     description = {
        id = 4430;
        value = "Some description"; 
    };
    ...
           };
     };
   };

当我解析这个时,我得到一个数组中的所有对象而不是一个单独的字符串,这就是我想要的。

我这样做了:

NSArray *result = [[res objectForKey:@"result"]valueForKeyPath:@"cars.brand.fields.name.value"];
NSLog(@"%@" , [result objectAtIndex:0]):

输出结果为:

(
    "Opel Astra",
    "Opel Omega",
    ....
),

如何一次获得一个字符串,而不是包含大量字符串的数组?

谢谢!

4 个答案:

答案 0 :(得分:1)

尝试SBJSON解析Objective-C中的JSON。

您可以从here

获取SBJSON

答案 1 :(得分:0)

使用NSJSONSerialization将JSON数据检索到基础对象中。

另见post

答案 2 :(得分:0)

您还可以将JSON字符串作为id-Value处理。 然后你调用[jsonString objectForKey:@“result”]。

试试这个功能,它对我来说很完美;)

- (id) objectInObject:(NSObject *) rootObject forPath:(NSString *) aKeyPath {

NSArray *keys = [aKeyPath componentsSeparatedByString:@"."];
NSObject *anObject = rootObject;


for (NSString *aKey in keys) {
    int arrayIndex = 0;
    bool isArray = NO;

    // check array
    if ([[aKey substringToIndex:2] isEqualToString:@"i:"]) {
        isArray = YES;
        NSArray *values = [aKey componentsSeparatedByString:@":" ];
        arrayIndex = [[values objectAtIndex:1] intValue];
    }

    if (isArray) {
        anObject = [(NSArray *) anObject objectAtIndex:arrayIndex];
    } else {
        anObject = [(NSDictionary *) anObject objectForKey:aKey];
    }
}
return anObject;

}

答案 3 :(得分:0)

使用SBJson作为您的JSON lib。然后只需使用这行代码(响应是一个字符串),您将获得所需的预期输出。

    NSMutableDictionary *responseJSON = [response JSONValue];