首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在解析json数据时判断key是否存在?

问如何在解析json数据时判断key是否存在?
EN

Stack Overflow用户
提问于 2019-05-11 21:01:35
回答 2查看 57关注 0票数 0

我正在尝试使用下面给出的Java.My json文件格式来解析json文件。如果操作是“注释”,我正在尝试打印一条消息并打印performed_at。但是,下面的代码没有输出。

提前感谢您的建议和您的time.Appreciate它。

代码语言:javascript
复制
 {
"data": {
    "name": "John"

},
"activities_data": [{
        "performed_at": "April",
        "id": 630,

        "action": {
            "address": "N/A",

            "issue_type": "F A"

        }
    },
    {
        "performed_at": "March",
        "id": 687,

        "action": {
            "note": {
                "id": 26519,
                "type": 4
            }
        }
    }
]
}

Java代码:

代码语言:javascript
复制
    import java.io.FileReader;
    import java.io.IOException;
    import org.json.simple.JSONArray;
    import org.json.simple.JSONObject;
    import org.json.simple.parser.JSONParser;
    import org.json.simple.parser.ParseException;
    import java.io.Reader;
    import java.util.Iterator;
    import java.util.Map; 


    public class Readjsonfile {

    public static void main(String[] args) throws Exception {
        JSONParser parser = new JSONParser();
        JSONObject ticketObject = (JSONObject) parser.parse(new FileReader("activity.json"));




        JSONArray jsonArray= (JSONArray) ticketObject.get("activities_data");


        for(int i=0; i<jsonArray.size(); i++){

            Map activityobject  = ((Map)jsonArray.get(i));
            System.out.println(activityobject);
            if (activityobject.containsKey("note"))
                {  
                System.out.println("its a note");
                    \\and print performed_at here
                }
            }   

        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-11 21:15:07

你应该嵌套一个更深的层次来获得笔记。

代码语言:javascript
复制
for(int i=0; i<jsonArray.size(); i++){
    Map activityobject  = ((Map)jsonArray.get(i));
    System.out.println(activityobject);
    if (activityobject.containsKey("action")) {
        Map actionObject  = ((Map)activityobject.get("action"));
        if (actionObject.containsKey("note")) {
            System.out.println("its a note");
            System.out.println("note" + actionObject.get("note"));
            System.out.println("Performed at " + activityobject.get("performed_at"));
        }
    }
}

输出

代码语言:javascript
复制
{"performed_at":"April","action":{"address":"N\/A","issue_type":"F A"},"id":630}
{"performed_at":"March","action":{"note":{"id":26519,"type":4}},"id":687}
its a note
note{"id":26519,"type":4}
Performed at March
票数 1
EN

Stack Overflow用户

发布于 2019-05-11 21:12:47

你应该得到一个JsonObject,而不是一个Map

代码语言:javascript
复制
JSONObject activityobject  = ((JSONObject) jsonArray.get(i));

然后,您必须加载JSON的action部分(您不能递归查找属性:

代码语言:javascript
复制
JSONObject actionObject  = ((JSONObject) activityobject.get('action'));

最后,您应该使用has()来检查所需的属性:

代码语言:javascript
复制
if (actionObject.has('note')) {
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56090583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档