如果不放置新值,请检查JSONObject是否包含嵌套值

时间:2018-08-05 08:51:31

标签: java json jackson

我正在使用Jackson 2.6.5

我有以下JSON:

{   
    "field1":
        {
            "innerField1":"innervalue"
        },

    "field2":"value"
}

我按如下方式阅读JSON:

JSONObject jsonObj = new JSONObject(jsonString);

我想检查我的jsonObj是否包含嵌套值,我想尝试的是:

if(!jsonObj.has("field1.innerField1"))//Trying to append if not exist

如果不存在附加值,我正在尝试的是:

jsonObj.put("field1.innerField1","innervalue");

但是它对我不起作用(has始终包含false,而put创建一个新值,例如field1.innerField1.value的固定净值,

那么我如何检查JSON是否包含嵌套值以及是否要附加它?

谢谢!

3 个答案:

答案 0 :(得分:0)

field1包含json对象。因此,您需要使用键field1读取JSONObject,然后使用必需的键检查是否存在。 试试这个:

String jsonString = "{   \n" +
            "    \"field1\":\n" +
            "        {\n" +
            "            \"innerField1\":\"innervalue\"\n" +
            "        },\n" +
            "\n" +
            "    \"field2\":\"value\"\n" +
            "}";
    JSONObject jsonObj = new JSONObject(jsonString);
    JSONObject innerJson = jsonObj.getJSONObject("field1");
    if(!innerJson.has("innerField1")){
        innerJson.put("innerField1","innervalue");
    }

答案 1 :(得分:0)

请将您的JsonObject转换为字符串,并使用string.contatin方法检查给定的字符串是否存在于JsonObject字符串上

例如:-

String jsonString = "{   \n" +
            "    \"field1\":\n" +
            "        {\n" +
            "            \"innerField1\":\"innervalue\"\n" +
            "        },\n" +
            "\n" +
            "    \"field2\":\"value\"\n" +
            "}";
if(!jsonString.contain("\"innerField1\":\"innervalue\")){
//add element in json
}

答案 2 :(得分:-1)

 JSONObject jsonObj= new JSONObject(jsonString);
if(jsonObj.has("innerField1")){
//do something
}
else{
     jsonObj.put("innerField1","innervalue");
}