web-dev-qa-db-fra.com

Comment tester si un objet JSON est vide en Java

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.

45
Classified
obj.length() == 0

c'est ce que je ferais.

114
Scott Tesler

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.

32
djechlin

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() 
6
Anderson

Si tableau vide:

.size() == 0

si objet vide:

.length() == 0
5
Rohan Lodhi

Essayer:

if (record.has("problemkey") && !record.isNull("problemkey")) {
    // Do something with object.
}
2
Orel Eraki

Je voudrais faire ce qui suit pour rechercher un objet vide

obj.similar(new JSONObject())
2
sorjef

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

0
kommradHomer

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) {}
0
Alex

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.

0
Object getResult = obj.get("dps"); 
if (getResult != null && getResult instanceof Java.util.Map && (Java.util.Map)getResult.isEmpty()) {
    handleEmptyDps(); 
} 
else {
    handleResult(getResult); 
}
0
Hot Licks
@Test
public void emptyJsonParseTest() {
    JsonNode emptyJsonNode = new ObjectMapper().createObjectNode();
    Assert.assertTrue(emptyJsonNode.asText().isEmpty());
}
0
Mikey
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)
0
Bharathi Raja