【问题标题】:check if multiple keys are present in a JSON String - Java检查 JSON 字符串中是否存在多个键 - Java
【发布时间】:2015-10-04 04:43:51
【问题描述】:

我有一个复杂的 JSON 字符串(数组/对象),我必须检查它是否包含一些键。它基本上是对我得到的 JSON 字符串的验证。

例如

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

我必须验证 JSON 是否包含 a、c、c.key4、a[*].key1。如果键存在,则其值不应为空。

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

请指点我如何做到这一点。

谢谢

【问题讨论】:

  • 你说的 heavy 库是什么意思?
  • @Andremoniy Heavy 库在某种意义上验证 json 键和值,我需要的是简单的键验证

标签: java json validation key schema


【解决方案1】:

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

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 库。

这种方法可以很好地满足我的要求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2022-11-28
    • 2014-12-27
    • 2022-01-08
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多