我正在测试在iphone应用程序上使用我的网站的Web服务。 有问题的JSON是:
[
{
"name": "Jason1",
"age": 20
},
{
"name": "Jason2",
"age": 40
},
{
"name": "Jason3",
"age": 60
}
]
我的代码:
NSData *jasonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://localhost:3000/all_personal_information.json"]];
NSDictionary *json = nil;
if (jasonData) {
json = [NSJSONSerialization JSONObjectWithData:jasonData options:kNilOptions error:nil];
}
代码可以正常使用{"name":"jason","age":20}
我可以使用json[@"name"]
和json[@"age"]
但我不知道如何从问题中获取JSON的值。
我试图使用[json enumerateKeysAndObjectsWithOptions]
横切字典。
但我会收到一个错误:
enumerateKeysAndObjectsWithOptions:usingBlock:]: unrecognized selector sent to instance 0x89b2490
但是当我将[json description]
记录到控制台时,我可以获得完整的JSON。
答案 0 :(得分:2)
当你得到一个数组时,你正在创建一个字典。如果你这样做,它应该工作:
id json = nil;
if (jasonData)
{
json = [NSJSONSerialization JSONObjectWithData:jasonData options:kNilOptions error:nil];
}
if ([json isKindOfClass:NSArray.class])
{
for (id personDef in json)
{
if ([personDef isKindOfClass:NSDictionary.class])
{
NSDictionary * dict = (NSDictionary *) moduleDef;
NSString * name = [dict objectForKey:@"name" withClass:NSString.class];
NSLog(@"Person: @%", name);
}
}
}
在这里,我做了一些额外的检查,看看对象是否是我们期望的对象。如果不是这种情况,则应添加(正确)错误处理。
答案 1 :(得分:2)
将它带入数组......例如
NSData *jasonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://localhost:3000/all_personal_information.json"]];
NSDictionary *json = nil;
if (jasonData) {
NSError *e = nil;
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:jasonData options:NSJSONReadingMutableContainers error: &e];
}
数组将包含您的
{
"name": "Jason1",
"age": 20
}
单个索引中的等。当你想要获取其中的值时,可以使用以下方法获取值
NSDictionary *userName = [jsonArray objectAtIndex:1];
NSString *stringName = [userName valueForKey:@"name"];
答案 2 :(得分:1)
它会帮助你。
NSMutableDictionary *CompaintsAry =[NSJSONSerialization JSONObjectWithData:respo options:kNilOptions error:&error];
NSMutableArray *tempary =[[NSMutableArray alloc]init];
for (int i=0;i < [CompaintsAry count];i++) {
CfResultFatch *rs = [[CfResultFatch alloc] initWithName:[[CompaintsAry obj ectAtIndex:i]objectForKey:@"Name"]
cipd :[[CompaintsAry objectAtIndex:i] objectForKey:@"Age"]];
[tempary addObject:rs];
}
cfComlaintsLists = [[NSMutableArray alloc] initWithArray:tempary];
SelectComplain = [[NSMutableArray alloc] initWithCapacity:[cfComlaintsLists count]];
[chiftab reloadData];