2012-01-05 110 views
0

我有一个JSON提要这样的:迭代通过嵌套的JSON数组iPhone

{ 
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", 
    .... 
), 

我怎样才能做到让一个字符串的时间,而不是包含了很多字符串数组?

谢谢!

回答

0

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

另请参阅此post

+0

无法使用NSJSONSerialization,因为它仅适用于iOS 5.0及更高版本。 – Magnus 2012-01-05 09:19:02

0

的SBJSON你也能够处理JSON字符串作为ID的价值。 然后你调用[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; 

}

+0

我应该只是传递一个数组或字典,为rootObject? – Magnus 2012-01-05 09:42:15

+0

我试过这种方法。我通过了一个NSArray。仍然得到相同的输出 – Magnus 2012-01-05 09:49:29

+0

什么是“我:”?你从哪里得到? – Magnus 2012-01-05 09:51:25

0

使用SBJson为您的JSON库。然后使用这一行代码(响应是一个字符串),你会得到你想要的输出。

NSMutableDictionary *responseJSON = [response JSONValue];