我目前正在使用icanzilb的JSONModel来解析我在线获得的JSON结构。问题是我有一个有数字键的字典,而且这些数字键是由服务器按需生成的。所以从理论上讲,我对这些数字键的含义没有预先了解。所以在这种情况下,我无法将@property添加到我的JSON数据头文件中。
关于如何处理这种情况的任何想法?
JSON结构的一个示例:
{
"Content":[
{
"0":{...},
"1":{...},
"2":{...},
"Forum":"1",
"Member": "Michael",
}
],
"Count":"5"
}
答案 0 :(得分:1)
您无法根据JSON响应动态地向本机对象添加属性,但您可以拥有一个NSMutableDictionary属性,并仅使用动态的数字键/对象填充该属性。
-(void)fillMyDictionaryProperty {
NSCharacterSet *nonNumericSet = [[NSCharacterSet decimalDigitCharacterSet] invertedSet];
for (NSString *key in jsonDictionary.allKeys) {
if ([key rangeOfCharacterFromSet:nonNumericSet].location == NSNotFound) {
id object = [jsonDictionary objectForKey:key];
[myMutableDictionary setObject:object forKey:key];
}
}
}
然后您可以使用它来获取与该键相关联的对象
-(id)getPropertyWithNumber:(NSInteger)num {
NSString *key = [NSString stringWithFormat:@"%li", (long)num];
return [myMutableDictionary objectForKey:key];
}
答案 1 :(得分:0)
首先获取Content数组中的字典。然后得到字典的数量,你知道字典中的所有对都有除最后两个之外的数字键值。你可以得到如下数值的计数。
NSArray *array = [jsonString valueForKey:@"Content"];
NSDictionary *dict = [array objectAtIndex:0];
//Count of numeric keys in dict
int count = [dict count]-2;
之后,您可以循环获取所有数字键值。
for(int i=0;i<count;i++)
{
NSDictionary *valueDict = [dict valueForKey:[NSString stringWithFormat:@"%d",i]];
}