我有这个数据结构:
{
"artistlist " : [
{
"performer" : "Gate Zero"
},
{
"performer" : "nightech"
},
{
"performer" : "Marko Fuerstenberg"
},
]
}
我用这行代码将NSString中的这个结构读入NSDictionary:
JSON = [NSJSONSerialization JSONObjectWithData:
[[chunks objectAtIndex:1]
dataUsingEncoding:NSUTF8StringEncoding] options:
NSJSONReadingMutableContainers error: &e];
with:[JSON objectForKey:@"artistlist "]
我得到了这个结构:
(
{
performer = "Gate Zero";
},
{
performer = nightech;
},
{
performer = "Marko Fuerstenberg";
}
)
有没有办法去“更深层次”?
我将如何解析生成的结构?
我想直接获取值列表或访问执行者名称。如果我在tupel中有多个值,例如表演者姓名,专辑,年份,该怎么办?我如何访问这些值?
谢谢。
答案 0 :(得分:9)
是的,在你[JSON objectForKey:@"artistlist "]
之后,你得到NSArray
NSDictionaries
(稍微有些混乱!)。
NSArray *performersArray = [JSON objectForKey:@"artistlist"];
for (NSDictionary *performerDic in performersArray) {
NSLog(@"%@", [performerDic objectForKey:@"performer"]);
}
这应该产生每个表演者的名字。或者,您可以执行for (NSUInteger i = 0; i < [performersArray count]; i++)
并访问NSDictionary *performersDic = [performersArray objectAtIndex: i]
。从那里,您可以类似地使用[performsDic objectForKey:@"performer"]
答案 1 :(得分:2)
像这样:
[[[JSON objectForKey:@"artistlist "] objectAtIndex: 1] objectForKey:@"performer"]
它会给你"nightech"
。
{}
对应NSDictionary
,[]
对应NSArray
。
答案 2 :(得分:1)
你必须使用递归。例如,假设您只有嵌套的NSDictionaries(易于修改以使用NSArrays):
- (void) getArtistFromJsonObject:(NSDictionary *)obj {
for (NSString *key in [obj allKeys]) {
id child = [obj objectForKey:key];
if ([child isKindOfClass:[NSString class]]) {
// that's the actual string
// NSLog(@"Found artist: %@", child); // or do whatever needed
} else if ([child isKindOfClass:[NSDictionary class]]) {
[self getArtistFromJsonObject:child];
}
}
}