检查 JSON 字符串中是否存在多个键 - Java

check if multiple keys are present in a JSON String - Java

我有一个复杂的 JSON 字符串 (Array/Object),我必须检查它是否包含一些 keys.Its 基本上是对我得到的 JSON 字符串的验证。

例如

inputJson:{
    a:[
        {
            key1:val1,
            key2:val2
        },{
            key1:val1,
            key2:val2
        },
    ],
    b:
    c:{
        key3:val3,
        key4:val4
    }
}

并且我必须验证 JSON 是否包含 acc.key4a[*].key1。如果密钥存在,其值不应为空。

我在这里看到过许多其他讨论,但要么不支持对象内部数组,要么使用大量库进行 JSON 验证。我正在寻找的是一个简单的库或方法,它只检查 JSON 字符串中是否存在键。

请指点一下如何操作。

谢谢

谢谢大家。我写了我的要求的代码。

public Object parseJsonForKey(String key,JSONObject jsonObject) throws DigitalSelfException{
          try {
            String[] keyPathArray = key.split("\.");
            System.out.println("Array length :" + keyPathArray.length);
            if (keyPathArray.length == 1) {
                if (jsonObject.containsKey(key)) {
                    return jsonObject.get(key);
                } else {
                    return null;
                }
            }
            JSONObject tempObj = new JSONObject();
            JSONArray tempArray = new JSONArray();
            if (jsonObject.get(keyPathArray[0]) instanceof JSONObject) {
                tempObj = (JSONObject) jsonObject.get(keyPathArray[0]);
            } else if (jsonObject.get(keyPathArray[0]) instanceof JSONArray) {
                tempArray = (JSONArray) jsonObject.get(keyPathArray[0]);
                tempObj = (JSONObject) tempArray.get(0);
            }
            System.out.println(tempObj.toString());
            for (int i = 1; i < keyPathArray.length - 1; i++) {
                if (tempObj.containsKey(keyPathArray[i])) {
                    if (tempObj.get(keyPathArray[i]) instanceof JSONObject) {
                        tempObj = (JSONObject) tempObj.get(keyPathArray[i]);
                    } else if (tempObj.get(keyPathArray[i]) instanceof JSONArray) {
                        tempArray = (JSONArray) tempObj.get(keyPathArray[i]);
                        tempObj = (JSONObject) tempArray.get(0);
                    }                   
                    System.out.println(tempObj.toString());
                } else {
                    return null;
                }
            }
            if (tempObj.containsKey(keyPathArray[keyPathArray.length - 1])) {
               return tempObj.get(keyPathArray[keyPathArray.length - 1]);
            } else {
                return null;
            } 
        } catch (Exception e) {
            // throw Exception
        }

我将上述函数称为

for (String key : mandatoryKeys) {
                if(ValidatorUtil.parseJsonForKey(key,jsonObject)==null){                   
                    return false;
                }                         
            }

因此,如果值为 null ,则表示密钥不存在。否则它包含键的值。

强制键示例:["a"、"c"、"c.key4"、"a.key1"]

我使用了 org.simple.json 库。

这个方法很适合我的要求。