我有这样的json结构 我正在尝试检查"类型"在每个嵌套的小部件数组中。如果它是某种类型,那么我试图提取像淡入淡出步骤,宽度,高度等属性。
有没有办法使用for循环? 现在我这样做:
for (NSString *widgetArray in widgets)
{
NSLog(@"%@", widgetArray);
}
其打印内容,如何提取相应的值? for(NSDictionary * [assets allValues]中的资产) { NSString * type = asset [@" type"];
if ([type isEqualToString:@"gradient"])
{
[gradients addObject:asset];
}
这是帮助我访问字典内容的其中一个成员提供的伪代码,我无法对嵌套数组结构应用类似的逻辑。
答案 0 :(得分:0)
要检查每个元素的类型,请使用NSObject
isKindOfClass:
方法。
所以,你可能有类似的东西:
if ([obj isKindOfClass:[NSDictionary class]]) { ... }
或者
if ([obj isKindOfClass:[NSArray class]]) { ... }
就像@ H2CO3所说,你使用objectAtIndex:
来访问数组元素,使用objectForKey:
来访问字典元素。
编辑:我刚刚意识到,通过“某种类型”,OP意味着“类型”字段的值,而不是条目的objective-c类。但是,在读取JSON数据以确定条目是数组还是字典时,它通常很有用,所以我将在这里留下我的答案。
答案 1 :(得分:0)
在最新的目标C中,您可以使用类似C数组的下标。例如,
NSLog(@"%@", widgetArray[i]);
对于词典,您可以通过键提取:
NSString* id = myDict[@"id"];
答案 2 :(得分:0)
由于问题是递归搜索,您必须使用堆栈。以下是步骤:
NSMutableArray
。现在它是空的。widgets
数组并将其所有对象放入堆栈(-addObjectsFromArray:
)。NSDictionary
)。在将其存储在变量中之后,请确保将从堆栈(-removeObjectAtIndex:
)中删除。type
比较和其他内容。伪代码:
// 1
NSMutableArray *stack = [NSMutableArray array];
// 2
[stack addObjectsFromArray:rootWidgets];
while (stack.count > 0) {
// 3
NSDictionary *widgetDict = [stack objectAtIndex:0];
[stack removeObjectAtIndex:0];
// 4
if ([[widgetDict objectForKey:@"type"] isEqualToString:...]) // Do whatever...
// 5
[stack addObjectsFromArray:[widgetDict objectForKey:@"widgets"]];
}
// 6
// You are done...