如何检索json中键的特定值?

Posted

技术标签:

【中文标题】如何检索json中键的特定值?【英文标题】:How to retrieve specific value of key in json? 【发布时间】:2017-03-26 04:12:48 【问题描述】:

这是我的 json 内容。

 [  
    
    "sha":"30eae8a47d0203ac81699d8fc2ab2632de2d0bba",
     "commit":  
     "author":  
        "name":"Madhura Bhave",
        "email":"mbhave@pivotal.io",
        "date":"2017-03-23T23:14:32Z"
     ,
     "committer":  
        "name":"Madhura Bhave",
        "email":"mbhave@pivotal.io",
        "date":"2017-03-23T23:14:32Z"
     ,
     "message":"Merge branch '1.5.x'",

   
 
 ]

这是我的主要内容。我只想从提交者字典中检索消息和名称、电子邮件、日期的键值。我被卡住了如何做到这一点。

    NSMutableArray *CommitArray = [[NSMutableArray alloc] init];


    for (NSDictionary *CommitDictionary in CommitJson) 
        CommitDict *commitDictObj = [[CommitDict alloc] init];
        commitDictObj.message = [CommitDictionary objectForKey:@"message"];

        for (NSDictionary *CommitterDictionary in [CommitDictionary objectForKey:@"committer"]) 
            Committer *author = [[Committer alloc] init];
            author.name = [CommitterDictionary objectForKey:@"name"];
            author.email = [CommitterDictionary objectForKey:@"email"];
            author.date = [CommitterDictionary objectForKey:@"date"];
        

        [CommitArray addObject:commitDictObj];
    




    for (int i =0 ; i < [CommitArray count] ; i++)
        CommitDict *commitDictObj = [CommitArray objectAtIndex:i];
        NSLog(@"Commit Message: %@", commitDictObj.message);



    

     return 0;



我尝试获取 json 并显示消息、姓名、电子邮件和日期的值。我如何记录消息、姓名、电子邮件和日期的值?

【问题讨论】:

打印一次提交数组并打印一次 CommitJson 对不起先生..我不明白..你能解释更多细节 您需要澄清您的问题。请edit您的问题并提供更多详细信息。您发布的代码究竟以何种方式不起作用?它编译吗?它会崩溃吗?能走多远? 打印一次这个数据 id CommitJson 您的 JSON 样本包含不平衡的 [] 和 ;您的代码使用您显示的 JSON 中未出现的键“commits_url”;而且你不清楚你的代码哪里出错了。如果人们要在没有大量猜测的情况下帮助您,您需要清理您的问题并提供更多详细信息。 【参考方案1】:

您的数组包含一个字典,该字典包含commit 字典,而不是直接包含commit 字典。替换那部分代码:

for (NSDictionary *CommitDictionary in CommitJson) 
        CommitDict *commitDictObj = [[CommitDict alloc] init];

这样:

for (NSDictionary *shaCommitDictionary in CommitJson) 
        CommitDict *commitDictObj = [[CommitDict alloc] init];
        NSDictionary *CommitDictionary = [shaCommitDictionary objectForKey:@"commit"];

【讨论】:

【参考方案2】:

(1) 将 JSON 转换为 NSDictionary

NSData *jsonData= ... // Assume you got the data already loaded
NSError *error = nil;    
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];

(2) 访问字典值(现在可以快速枚举!!

NSString *message = dictionary[@"message"];

NSDictionary *author = dictionary[@"author"];
NSString *name = author[@"author"];
NSString *email = author[@"author"];
NSString *date = author[@"author"];
// OR:
// NSString *name = dictionary[@"author"][@"author"];
// NSString *email = dictionary[@"author"][@"author"];
// NSString *date = dictionary[@"author"][@"author"];

就是这样。我认为棘手的事情是将 JSON 数据获取到 NSDictionary? 见这里:https://***.com/a/30561781/464016

【讨论】:

以上是关于如何检索json中键的特定值?的主要内容,如果未能解决你的问题,请参考以下文章

计算 json 对象中键的出现次数 - IMPALA/HIVE

如何将数组中键的值添加到字典中? [关闭]

如何更改哈希映射中键的值? [复制]

如何替换 Python 中键的值?

如何维护 Java 属性文件中键的顺序?

如何使用Javascript读取json文件并将特定键的值写入同一json文件中?