如何在对象 C 中解析具有多个实例的 JSON [重复]

Posted

技术标签:

【中文标题】如何在对象 C 中解析具有多个实例的 JSON [重复]【英文标题】:How to parse JSON with multiple instance in Object C [duplicate] 【发布时间】:2012-10-06 07:23:14 【问题描述】:

可能重复:How to use NSJSONSerialization

我正在测试在 iphone 应用程序上使用我网站的网络服务。 有问题的 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。

【问题讨论】:

不是jason,是JSON jason 是我的名字,只是为了测试 :) 【参考方案1】:

把它放在一个数组中..例如

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"];

【讨论】:

它很简单但是很有效:) 我没有记住返回类型是一个 id 指针。我一直认为返回类型是 NSDictionary。所以 NSDictionary 只是关于键值对。 NSArray 是关于任何对象的数组??? 是的..它很简单..很高兴我能帮上忙:) 你的意思是标记最佳答案吗?? 返回类型不完全是字典.. n 是.. 数组可以是任何对象..【参考方案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);
        
    

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

【讨论】:

很好的尝试 :) 我希望我理解你的代码并修正了一些语法错误。但是我仍然无法完成任务。[链接]chopapp.com/#n5y1m9tk[link]。标签显示这不是 NSArray。 OOO我搞错了,我忘了打开我的服务器【参考方案3】:

它会帮助你。

     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];

【讨论】:

注意,这里有 4 个未发布的对象。 我没有测试它,因为我不知道CfResultFatch是什么。不过谢谢你的回答:) 什么是CfResultFatch?使用 Google,我无法找到任何有用的此类参考,甚至无法找到选择器 initWithName:cipd:,尽管我在其他网站上找到了类似的示例代码。

以上是关于如何在对象 C 中解析具有多个实例的 JSON [重复]的主要内容,如果未能解决你的问题,请参考以下文章

加载和解析具有多个 JSON 对象的 JSON 文件

如何使用 Swifty 动态创建具有多个键和值的 json 对象

如何解析具有多个值的 json?

如何忽略 JSON 解析回数据中的某些对象?

使用 Alamofire 和 SwiftyJSON 正确解析具有多个对象的 JSON 数组

C#中具有多个对象的JSON文件的反序列​​化