java – 检查嵌套JSON中是否存在密钥
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 检查嵌套JSON中是否存在密钥,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3044字,纯文字阅读大概需要5分钟。
内容图文
我陷入了需要检查嵌套JSON对象中是否存在密钥的情况.通过嵌套的JSON对象,我在父JSON对象中有一个JSON对象作为其键之一的值.所以我需要检查这个键是否存在于整个JSON对象中.我将以下数据作为String对象获取.我知道我可以解析这个String对象来获取JSON对象.
{
"claim_loss_type_cd": "TEL",
"claim_type": "002",
"claim_reason": "001",
"policy_number": "1234kk3366ff664",
"info": {
"ApplicationContext": {
"country": "US"
}
}
}
我已经使用containsKey()方法来检查主JSON对象中的密钥是否存在并且它可以工作.但是为了检查任何内部JSON对象,比如“info”,我需要再次将该Object解析为JSON对象,然后再次检查密钥.
String jsonString = "My JSON String here";
JSONObject finalResponse = new JSONObject(jsonString);
finalResponse.containsKey("country"); // will return false
JSONObject intermediateResponse = (JSONObject)finalResponse.get("info");
intermediateResponse.containsKey("country"); // will return true
那么有没有更好的方法,任何可以在任何内部JSON对象内部检查的API或方法,而无需解析内部JSON对象.我正在使用com.ibm.json.java.JSONObject.JSONObject()用于Websphere Application Server的本机IBM库,而我正在使用其他JSON解析器.
考虑到上面的JSON,像“claim_type”是父JSON对象中的键,但“info”本身就是一个JSON对象.
所以我需要做的是检查一个密钥是否存在于完整的JSON中,在父代或其任何子JSON对象中,如示例中的键“country”.
编辑:
感谢@chsdk,我找到了解决方案.但是,如果有其他人使用其他API来解决任何问题,请回复,因为以下解决方案正在考虑递归和&可能有很大的空间/时间复杂性.
public static boolean checkKey(JSONObject object, String searchedKey) {
boolean exists = object.containsKey(searchedKey);
if(!exists) {
Set<String> keys = object.keySet();
for(String key : keys){
if ( object.get(key) instanceof JSONObject ) {
exists = checkKey((JSONObject)object.get(key), searchedKey);
}
}
}
return exists;
}
解决方法:
您可以使用JSONObject来解析您的json并使用其has(String key)方法来检查此Json中是否存在密钥:
String str="{\"claim_loss_type_cd\": \"TEL\",\"claim_type\":\"002\",\"claim_reason\": \"001\",\"policy_number\":\"1234kk3366ff664\",\"info\": {\"ApplicationContext\":{\"country\": \"US\"}}}";
Object obj=JSONValue.parse(str);
JSONObject json = (JSONObject) obj;
//Then use has method to check if this key exists or not
System.out.println(json.has("claim_type")); //Returns true
编辑:
或者更好的是,您只需检查JSON字符串是否包含此键值,例如使用indexOf()方法:
String str="{\"claim_loss_type_cd\": \"TEL\",\"claim_type\":\"002\",\"claim_reason\": \"001\",\"policy_number\":\"1234kk3366ff664\",\"info\": {\"ApplicationContext\":{\"country\": \"US\"}}}";
System.out.println(str.indexOf("claim_type")>-1); //Returns true
编辑2:
看一下这个方法,它遍历嵌套对象以检查密钥是否存在.
public boolean keyExists(JSONObject object, String searchedKey) {
boolean exists = object.has(searchedKey);
if(!exists) {
Iterator<?> keys = object.keys();
while( keys.hasNext() ) {
String key = (String)keys.next();
if ( object.get(key) instanceof JSONObject ) {
exists = keyExists(object.get(key), searchedKey);
}
}
}
return exists;
}
Object obj=JSONValue.parse(str);
JSONObject json = (JSONObject) obj;
System.out.println(keyExists(json, "country")); //Returns true
内容总结
以上是互联网集市为您收集整理的java – 检查嵌套JSON中是否存在密钥全部内容,希望文章能够帮你解决java – 检查嵌套JSON中是否存在密钥所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。