web-dev-qa-db-fra.com

Convertir une chaîne JSON en objet dans Java ME?

Existe-t-il un moyen dans Java/J2ME de convertir une chaîne, telle que:

{name:"MyNode", width:200, height:100}

à une représentation interne de l'objet identique, dans une ligne de code?

Parce que la méthode actuelle est trop fastidieuse:

Object n = create("new");
setString(p, "name", "MyNode");
setInteger(p, "width", 200);
setInteger(p, "height", 100);

Peut-être une bibliothèque JSON?

116
Robinicks

J'ai utilisé quelques-uns d'entre eux et mon préféré est,

http://code.google.com/p/json-simple/

La bibliothèque est très petite, donc parfaite pour J2ME.

Vous pouvez analyser JSON dans l'objet Java sur une seule ligne, comme ceci,

JSONObject json = (JSONObject)new JSONParser().parse("{\"name\":\"MyNode\", \"width\":200, \"height\":100}");
System.out.println("name=" + json.get("name"));
System.out.println("width=" + json.get("width"));
108
ZZ Coder

L'option la plus simple est Jackson :

MyObject ob = new ObjectMapper().readValue(jsonString, MyObject.class);

Il existe d’autres bibliothèques simples à utiliser (Gson a déjà été mentionné); mais certains choix sont plus laborieux, comme la bibliothèque originale org.json, qui vous oblige à créer un "JSONObject" intermédiaire, même si vous n'en avez pas besoin.

79
StaxMan

GSON est une bonne option pour convertir un objet Java en un objet json et inversement.
C’est un outil fourni par Google.

pour convertir json en objet Java, utilisez: fromJson(jsonObject,javaclassname.class)
pour convertir un objet Java en objet json, utilisez: toJson(javaObject)
et le repos se fera automatiquement

Pour plus informations et téléchargement

61
Alok Vaish

Vous pouvez le faire facilement avec Google GSON.

Supposons que vous avez une classe appelée User avec les champs user, width et height et que vous voulez convertir la chaîne json suivante en objet User.

{"name":"MyNode", "width":200, "height":100}

Vous pouvez facilement le faire, sans avoir à lancer de casting (en gardant à l'esprit le commentaire de nimcap;)), avec le code suivant:

Gson gson = new Gson(); 
final User user = gson.fromJson(jsonString, User.class);

Où jsonString est la chaîne JSON ci-dessus.

Pour plus d'informations, consultez https://code.google.com/p/google-gson/

23
sufinawaz

Vous avez beaucoup de analyseurs JSON pour Java :

  • JSONObject.Java
    Un objet JSON est une collection non ordonnée de paires nom/valeur. Sa forme externe est une chaîne entourée d'accolades avec des deux points entre les noms et les valeurs et des virgules entre les valeurs et les noms. La forme interne est un objet ayant des méthodes get () et opt ​​() pour accéder aux valeurs par nom, et des méthodes put () pour ajouter ou remplacer des valeurs par nom. Les valeurs peuvent être l'un des types suivants: Boolean, JSONArray, JSONObject, Number et String ou encore l'objet JSONObject.NULL.

  • JSONArray.Java
    Un tableau JSON est une séquence ordonnée de valeurs. Sa forme externe est une chaîne entourée de crochets avec des virgules entre les valeurs. La forme interne est un objet ayant des méthodes get () et opt ​​() pour accéder aux valeurs par index et des méthodes put () pour ajouter ou remplacer des valeurs. Les valeurs peuvent être l'un des types suivants: Boolean, JSONArray, JSONObject, Number et String ou encore l'objet JSONObject.NULL.

  • JSONStringer.Java
    JSONStringer est un outil permettant de générer rapidement du texte JSON.

  • JSONWriter.Java
    JSONWriter est un outil permettant d’écrire rapidement du texte JSON dans des flux.

  • JSONTokener.Java
    Un JSONTokener prend une chaîne source et en extrait des caractères et des jetons. Il est utilisé par les constructeurs JSONObject et JSONArray pour analyser les chaînes source JSON.

  • JSONException.Java
    Une exception JSON est levée lorsqu'une erreur de syntaxe ou de procédure est détectée.

  • JSONString.Java
    JSONString est une interface qui permet aux classes d’implémenter leur sérialisation JSON.

22
Esteban Küber

site officiel JSON est l'endroit où vous devriez regarder. Il fournit diverses bibliothèques utilisables avec Java. J'ai personnellement utilisé celui-ci, JSON-lib qui est une implémentation du travail dans le site. Il a donc exactement la même classe - méthodes, etc. dans ce page .

Si vous cliquez sur les liens HTML, vous pouvez trouver tout ce que vous voulez.

En bref:

pour créer un objet json et un tableau json, le code est le suivant:

JSONObject obj = new JSONObject();
obj.put("variable1", o1);
obj.put("variable2", o2);
JSONArray array = new JSONArray();
array.put(obj);

o1, O2, peuvent être des types primitifs (long, int, boolean), Strings ou Arrays.

Le processus inverse est assez simple, je veux dire convertir une chaîne en objet/tableau json.

String myString;

JSONObject obj = new JSONObject(myString);

JSONArray array = new JSONArray(myString);

Pour être correctement analysé, il vous suffit de savoir si vous analysez un tableau ou un objet.

7
tzik

Utilisez google GSON bibliothèque pour cela

public static <T> T getObject(final String jsonString, final Class<T> objectClass) {  
    Gson gson = new Gson();  
    return gson.fromJson(jsonString, objectClass);  
}

http://iandjava.blogspot.in/2014/01/Java-object-to-json-and-json-to-Java.html

7
Ashish Aggarwal

Comme beaucoup l'ont déjà dit, c'est un moyen assez simple d'utiliser JSON.simple comme ci-dessous.

import org.json.JSONObject;

String someJsonString = "{name:"MyNode", width:200, height:100}";
JSONObject jsonObj = new JSONObject(someJsonString);

Et utilisez ensuite jsonObj pour gérer les objets JSON. par exemple, jsonObj.get ("nom");

Selon le lien ci-dessous, JSON.simple affiche une efficacité constante pour les fichiers JSON petits et grands.

http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/

5
Kripz

JSON IO est de loin le moyen le plus simple de convertir une chaîne JSON ou un flux d'entrée JSON en un objet Java.

Chaîne en Java Object
Object obj = JsonReader.jsonToJava("[\"Hello, World\"]");

https://code.google.com/p/json-io/

3

C'est une vieille question et json-simple ( https://code.google.com/p/json-simple/ ) pourrait être une bonne solution à ce moment-là, mais veuillez considérer que le projet ne semble pas être actif pendant un moment!

Je suggère le Gson qui est maintenant hébergé à: https://github.com/google/gson

Si les performances sont votre problème, vous pouvez jeter un oeil à quelques points de repère http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json / qui comparent.

3
Alireza Fattahi

Mis à part www.json.org , vous pouvez également implémenter votre propre analyseur en utilisant javacc et en faisant correspondre votre grammaire/schéma personnel. Voir cette note sur mon blog: http://plindenbaum.blogspot.com/2008/07/parsing-json-with-javacc-my-notebook.html

2
Pierre

Jackson pour les gros fichiers, GSON pour les petits fichiers et JSON.simple pour gérer les deux.

2
Thanga

J'ai écrit une bibliothèque qui utilise json.org pour analyser JSON, mais elle créera en réalité un proxy d'interface. Le code/JAR est sur code.google.com.

http://fixjures.googlecode.com/

Je ne sais pas si cela fonctionne sur J2ME. Comme il utilise Java Reflection pour créer des proxies, je pense que cela ne fonctionnera pas. En outre, il a actuellement une dépendance importante à l'égard de Google Collections que je souhaite supprimer et il est probablement trop lourd pour vos besoins, mais il vous permet d'interagir avec vos données JSON comme vous le souhaitez:

interface Foo {
    String getName();
    int getWidth();
    int getHeight();
}

Foo myFoo = Fixjure.of(Foo.class).from(JSONSource.newJsonString("{ name : \"foo name\" }")).create();
String name = myFoo.getName(); // name now .equals("foo name");
2
Steve Reed

Créez simplement un objet Json dans Java avec le Json String suivant. Dans votre cas

{name:"MyNode", width:200, height:100}

si ce qui précède est votre chaîne Json, créez simplement un objet Json avec elle.

JsonString ="{name:"MyNode", width:200, height:100}";
JSONObject yourJsonObject = new JSONObject(JsonString);
System.out.println("name=" + yourJsonObject.getString("name"));
System.out.println("width=" + yourJsonObject.getString("width"));
1
rAm