-1

可能重复:
如何使用 NSJSONSerialization

我正在测试在 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:]: 无法识别的选择器发送到实例 0x89b2490

[json description]但是当我登录到控制台时,我可以获得完整的 JSON 。

4

3 回答 3

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);
        }
    }
}

在这里,我做一些额外的检查对象是否是我们期望的对象。如果不是这种情况,您应该添加(正确的)错误处理。

于 2012-10-06T07:35:42.523 回答
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"];
于 2012-10-06T07:47:58.810 回答
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];
于 2012-10-06T07:41:53.900 回答