2010-09-06 3 views
1

Salaam,JSON api java officiel: JSONArray de JSONObjects

Utilisation de l'API json.org, nous pouvons facilement convertir une carte à un objet JSON:

Map<String, String> carta = new Map<String, String>(); 
    carta.put("id", "123"); 
    carta.put("Planet", "Earth"); 
    carta.put("Status", "getting dirty"); 
    JSONObject json = new JSONObject(); 
    for(Iterator<String> it=input.keySet().iterator(); it.hasNext();){ 
    String key = it.next(); 
    json.put(key, input.get(key)); 
    } 
    System.out.println(json.toString()); 
// output:   {id:"123", Planet:"Earth", Status: "getting dirty"} 

Maintenant, nous voulons avoir un tableau de ces object L'API ne le fournit pas?

Au moins, l'ajout JSONObjects à un JSONArray supprime les parenthèses:

JSONArray joArr = new JSONArray(); 
    joArr.put(cartaEarth); 
    joArr.put(cartaMars); 
    System.out.println(joArr.toString()); 

//output:  [{ id:123, Planet:Earth, Status: getting dirty }, {id: 456, Planet:Mars, Status: maybe aliens there }] 

sans crochets ... alors que dans l'API, ils mentionnent:

put(java.util.Map value) 
      Put a value in the JSONArray, where the value will be a JSONObject which is produced from a Map. 

au lieu de le faire byhand préféré discutez-en d'abord, merci d'avance!

+2

avez-vous essayez http://code.google.com/p/google-gson/? il est spécialisé dans Obj à JSon et Json à Obj – rsilva4

+0

Quelle est exactement la question? Vous demandez comment placer vos objets dans un tableau, mais continuez à montrer que vous savez comment le faire. – RoToRa

+0

Je ne comprends pas pourquoi la conversion pour JSONArray n'est pas cohérente avec la conversion JSONObject. Dans JSONArray, les crochets sont supprimés! –

Répondre

1

avez-vous essayez GSon? Il est spécialisé dans Java Object to JSon et Json to Java Object.

+0

gson fait très bien le travail, merci @rsilva! néanmoins, je me demande si l'API de json.org est OK? –

0

Je vous conseille de regarder quelque chose d'autre que paquet org.json. Pratiquement toutes les alternatives de la liste org.json offrent des moyens plus pratiques et plus simples de travailler avec JSON. Mis à part Gson que certains aiment, je recommanderais Jackson; et flex-json et Svenson sont d'autres paquets qui semblent décents. Si vous insistez pour le faire en utilisant org.json, vous devez expliquer un peu plus votre problème - API a toutes les méthodes dont vous avez besoin, et vous permet d'ajouter des valeurs de tous types (tableaux JSON, objets, etc.). chaînes, nombres, booléens et null). Mais vos types doivent correspondre aux types JSON, donc il n'y a pas de conversions de tableaux en objets, par exemple.

+0

OK 4 http://jackson.codehaus.org/ En ce qui concerne json.org, je ne l'attachement à ce ... encore ... @API, JSONArray produit JSONObjects d'une carte d'une autre façon (pas de crochets) que la création manuelle d'un JSONObject à partir d'une carte. –

+0

ok (par création de cartes), ne l'ont pas beaucoup utilisé. Dommage si c'est asymétrique. Mais notez que les brackets ne font pas partie du modèle objet, mais de la sérialisation ... Je suppose que ce que vous dites est qu'il ajoute tous les éléments de Map ou List, pas la Map ou la List elle-même. En Java, cela est généralement dû à la différence entre List.add() et List.addAll() (ou Map.put(), Map.putAll()). – StaxMan