L'objet JSON que je reçois ressemble à ceci:
[{"foo1":"bar1", "foo2":"bar2", "problemkey": "problemvalue"}]
Ce que j'essaie de tester, c'est l'existence de problemvalue
. Si problemvalue
renvoie un objet JSON, je suis heureux. Si ce n'est pas le cas, il retournera sous la forme {}
. Comment puis-je tester pour cette condition? J'ai essayé plusieurs choses en vain.
C'est ce que j'ai essayé jusqu'à présent:
// if (obj.get("dps") == null) { //didn't work
// if (obj.get("dps").equals("{}")) { //didn't work
if (obj.isNull("dps")) { //didn't work
System.out.println("No dps key");
}
Je m'attendais à ce que l'une de ces lignes affiche "Aucune clé DPS" car {"dps":{}}
, mais pour une raison quelconque, ce n'est pas le cas. J'utilise org.json
. Le fichier jar est org.json-20120521.jar
.
obj.length() == 0
c'est ce que je ferais.
Si vous êtes d'accord avec un hack -
obj.toString().equals("{}");
La sérialisation de l'objet est coûteuse et surtout pour les objets volumineux, mais il est bon de comprendre que JSON est transparent en tant que chaîne. Par conséquent, vous pouvez toujours consulter la représentation de chaîne pour résoudre un problème.
Une notation JSON {} représente un objet vide, ce qui signifie un objet sans membres. Ce n'est pas la même chose que null. Ce n'est pas non plus une chaîne puisque vous essayez de la comparer avec la chaîne "{}" . Je ne sais pas quelle bibliothèque Json utilisez-vous, mais essayez de rechercher une méthode similaire à celle-ci:
isEmptyObject()
Si tableau vide:
.size() == 0
si objet vide:
.length() == 0
Essayer:
if (record.has("problemkey") && !record.isNull("problemkey")) {
// Do something with object.
}
Je voudrais faire ce qui suit pour rechercher un objet vide
obj.similar(new JSONObject())
J'ai ajouté des méthodes isEmpty () sur JSONObject et JSONArray ()
//on JSONObject
public Boolean isEmpty(){
return !this.keys().hasNext();
}
...
//on JSONArray
public Boolean isEmpty(){
return this.length()==0;
}
vous pouvez l'obtenir ici https://github.com/kommradHomer/JSON-Java
Si JSON est retourné avec la structure suivante lorsque records est un ArrayNode:
{}client
records[]
et vous voulez vérifier si le nœud records a quelque chose dedans alors vous pouvez le faire en utilisant une méthode size ();
if (recordNodes.get(i).size() != 0) {}
si vous voulez vérifier le cas vide JSON, nous pouvons directement utiliser le code ci-dessous
String jsonString = {};
JSONObject jsonObject = new JSONObject(jsonString);
if(jsonObject.isEmpty()){
System.out.println("json is empty");
} else{
System.out.println("json is not empty");
}
cela peut vous aider.
Object getResult = obj.get("dps");
if (getResult != null && getResult instanceof Java.util.Map && (Java.util.Map)getResult.isEmpty()) {
handleEmptyDps();
}
else {
handleResult(getResult);
}
@Test
public void emptyJsonParseTest() {
JsonNode emptyJsonNode = new ObjectMapper().createObjectNode();
Assert.assertTrue(emptyJsonNode.asText().isEmpty());
}
if (jsonObj != null && jsonObj.length > 0)
Pour vérifier si un objet JSON imbriqué est vide dans un objet JSON:
if (!jsonObject.isNull("key") && jsonObject.getJsonObject("key").length > 0)