Ich bin in einer Situation stecken, in der ich überprüfen muss, ob ein Schlüssel in einem verschachtelten JSON-Objekt vorhanden ist. Durch verschachteltes JSON-Objekt, das ein JSON-Objekt im übergeordneten JSON-Objekt als Wert eines seiner Schlüssel enthält. Also muss ich prüfen, ob dieser Schlüssel im gesamten JSON-Objekt existiert. Ich bekomme die folgenden Daten als String
Objekt. Ich weiß, dass ich dieses Objekt String
analysieren kann, um JSON-Objekt zu erhalten.Überprüfen Sie, ob ein Schlüssel in einem geschachtelten JSON vorhanden ist
{
"claim_loss_type_cd": "TEL",
"claim_type": "002",
"claim_reason": "001",
"policy_number": "1234kk3366ff664",
"info": {
"ApplicationContext": {
"country": "US"
}
}
}
ich verwendet habe containsKey()
Methode den Schlüssel Existenz im Haupt JSON-Objekt zu überprüfen, und es funktioniert. Aber zum Überprüfen eines internen JSON-Objekts wie "info" muss ich das Object
erneut zum JSON-Objekt analysieren und dann den Schlüssel erneut prüfen.
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
So ist es eine bessere Möglichkeit, jede API oder eine Methode, die das interne JSON-Objekt zu parsen, ohne die Notwendigkeit als auch innerhalb jeden internen JSON-Objekts überprüfen kann. Ich benutze com.ibm.json.java.JSONObject.JSONObject()
native IBM Bibliothek für Websphere Application Server und keine zusätzlichen JSON Parser ich benutze.
In Anbetracht des obigen JSON ist "Claim_type" ein Schlüssel im übergeordneten JSON-Objekt, aber "info" an sich ein JSON-Objekt. Also, was ich tun muss, ist zu überprüfen, ob ein Schlüssel in vollständigen JSON, entweder in Eltern oder einem seiner Kind JSON-Objekt wie Schlüssel "Land" hier im Beispiel existiert.
EDIT:
Dank @chsdk kam ich zu einer Lösung. Aber wenn jemand mit einer anderen API zu einer Lösung kommt, antworten Sie bitte, da die Lösung unter Berücksichtigung der Rekursion & eine große Raum/Zeit-Komplexität haben kann.
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;
}
gefällt Ihnen jakson etc alle JSON-Parser verwendet? –
Guys, * JSON * (das Wort) ist kein Code, nicht als Code-Block zu formatieren. –
@TimCastelijns jemand schlug mir vor, dass JSON als Code zu machen, also nahm ich diesen Vorschlag für bearbeiten –