【问题标题】:How do I gather JSON data nested in an array using NSDictionary如何使用 NSDictionary 收集嵌套在数组中的 JSON 数据
【发布时间】: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

标签: ios objective-c json


【解决方案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 上面所做的那样提供解决方案。当你这样的巨魔时,你是如何拥有这种程度的信誉的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多