如何使用 NSDictionary 收集嵌套在数组中的 JSON 数据

Posted

技术标签:

【中文标题】如何使用 NSDictionary 收集嵌套在数组中的 JSON 数据【英文标题】:How do I gather JSON data nested in an array using NSDictionary 【发布时间】:2014-03-08 02:34:10 【问题描述】:

我有以下 JSON:


0: 200,
error: false,
campaigns: 
current_campaigns: [
                
                id: "1150",
                campaign_type_id: "1",
                campaign_type: "Type",
                title: "Name (with type) ",
                url: "http://www.example.com",
                special: null,
                campaign_instructions: "Here's what you do",
                pay_description: "",
                start: "2013-10-14 00:00:00",
                end: "2014-03-31 23:59:59"
                ,
                
                id: "1151",
                campaign_type_id: "1",
                campaign_type: "Type",
                title: "Name (with type) ",
                url: "http://www.example.com",
                special: null,
                campaign_instructions: "Here's what you do",
                pay_description: "",
                start: "2013-10-14 00:00:00",
                end: "2014-03-31 23:59:59"
                ,
    ],
    new_campaigns: [
                
                id: "1152",
                campaign_type_id: "1",
                campaign_type: "Type",
                title: "Name (with type) ",
                url: "http://www.example.com",
                special: null,
                campaign_instructions: "Here's what you do",
                pay_description: "",
                start: "2013-10-14 00:00:00",
                end: "2014-03-31 23:59:59"
                

    ]

还有下面的代码

NSURL *theJSON = [NSURL URLWithString:@"http://somejsonurl"];
NSURLRequest *request = [NSURLRequest requestWithURL:theJSON];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError)
    NSError *errorJson = nil;
NSDictionary *dataDictionary = [NSJSONSerialization JSONObjectWithData:data options:0     error:&errorJson];

    NSArray *campaigns = dataDictionary[@"campaigns"];

    for (NSDictionary *campaignList in campaigns) 
        NSLog(@"Call gave: %@", campaigns);
    

我将如何最终记录 current_campaign 标题? 我试过了

   NSLog(@"%@", [campaignList objectForKey:@"title"]);
   NSLog(@"%@", campaigns[@"title"] );

并没有成功。我是 Objective C 的新手,无法理解如何使用 NSArray 和 NSDictionary 深入研究 JSON。任何帮助将不胜感激!

【问题讨论】:

访问 json.org 并学习 JSON 语法。只需 5-10 分钟。 “去学习 X”可能是帮助某人解决问题的最没有帮助的方式。 你试过了吗???真的确实只需要 5-10 分钟来学习,当你学会它时,JSON 变得少得多令人困惑。当你理解它时,它真的非常简单。 我同意 Hot Licks。我关于识别 [] 和 的提示将帮助您理解构成 JSON 对象的两种结构的分解,但这仅仅是开始。我还建议更多地了解它。我认为 Hot Licks 只是想提供帮助。 我认为你的方法与 ElJay 不同。有帮助 vs bit.ly/1nGQMVA 【参考方案1】:

关于JSON,最容易记住的一点是,每次看到括号“[”时,这意味着Array 的开头,而“]”是结尾。每次看到花括号“”表示Dictionary 的开头,“”是结尾。

因此,在您的示例中,campaigns 是一个 Dictionary 元素,另一个 Dictionary (current_campaigns) 包含 ArrayDictionaries。每个Dictionaries 都有一个key,称为title

所以长版本(未经测试):

NSDictionary *campaigns = [dataDictionary objectForKey:@"campaigns"];
NSArray *currentCampaigns = [campaigns objectForKey:@"current_campaigns"];
for (NSDictionary *thisCampaign in currentCampaigns) 
    NSLog(@"title: %@", [thisCampaign objectForKey:@"title"]);
 

【讨论】:

这项工作不仅像魔术一样有效(语法在 objectForKey 之后缺少 ':',但 nbd )...您对 [] 和 的提示正是我需要做的提示.谢谢! @Aubrey -- 这很奇怪,因为这是我给你的确切建议 -- 去 json.org 并学习语法。当您在上面得到的“提示”完全相同时,为什么“没有帮助”?? 您给出的建议是“去某个地方学习”而不是像 ElJay 上面所做的那样提供解决方案。当你这样的巨魔时,你是如何拥有这种程度的信誉的。

以上是关于如何使用 NSDictionary 收集嵌套在数组中的 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

以 NSDictionary 作为对象的嵌套数组上的 NSPredicate

JSONModel 嵌套字典数组 JSONModel nest NSDictionary NSArray

如何使用 Swift 将新数组数据添加到 plist 文件中的 NSDictionary

具有深度嵌套层次结构的不可变 NSDictionary:更改键的值?

JSON 和嵌套的 NSDictionary

如何在 PLIST 中访问嵌套的 NSDictionary?