检查 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 是否包含 a
、c
、c.key4
、a[*].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 库。
这个方法很适合我的要求。
我有一个复杂的 JSON 字符串 (Array/Object),我必须检查它是否包含一些 keys.Its 基本上是对我得到的 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 字符串中是否存在键。
请指点一下如何操作。
谢谢
谢谢大家。我写了我的要求的代码。
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 库。
这个方法很适合我的要求。