Je possède une variable String appelée jsonString
:
{"phonetype":"N95","cat":"WP"}
Maintenant je veux la convertir en objet JSON. J'ai cherché davantage sur Google mais je n'ai pas obtenu les réponses attendues!
Je possède une variable String appelée jsonString
:
{"phonetype":"N95","cat":"WP"}
Maintenant je veux la convertir en objet JSON. J'ai cherché davantage sur Google mais je n'ai pas obtenu les réponses attendues!
En utilisant la bibliothèque org.json:
try {
JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
}catch (JSONException err){
Log.d("Erreur", err.toString());
}
J'ai essayé avec comme ça JSONObject js=new JSONObject(jsonstring); mais ça montre une erreur. sur jsonstring
Il a obtenu une erreur car il n'utilise pas org.json, il utilise google-gson qui ne fonctionne pas de cette manière.
La version 1.1.1 de json-simple semble poser problème. Ce qui précède donne une "Exception non gérée" pour parser.parse(
et demande un try-catch ou throws. Mais lorsque vous en ajoutez un, cela génère une erreur Type d'exception non gérée ParseException
, ou une erreur NoClassDefFound pour ParseException de org.json.simple.parser
même lorsque vous avez json-simple dans les dépendances Maven et clairement visible dans la bibliothèque du projet.
Vous pouvez utiliser google-gson
. Détails :
Exemples d'Objets
class SacDePrimitifs {
private int valeur1 = 1;
private String valeur2 = "abc";
private transient int valeur3 = 3;
SacDePrimitifs() {
// constructeur sans arguments
}
}
(Serialization)
SacDePrimitifs obj = new SacDePrimitifs();
Gson gson = new Gson();
String json = gson.toJson(obj);
==> json est {"valeur1":1,"valeur2":"abc"}
Notez que vous ne pouvez pas sérialiser des objets avec des références circulaires car cela entraînera une récursion infinie.
(Désérialisation)
SacDePrimitifs obj2 = gson.fromJson(json, SacDePrimitifs.class);
==> obj2 est juste comme obj
Un autre exemple pour Gson:
Gson est facile à apprendre et à implémenter, vous devez connaître les deux méthodes suivantes:
-> toJson() - convertir un objet java en format JSON
-> fromJson() - convertir JSON en un objet java
import com.google.gson.Gson;
public class TestObjetVersJson {
private int donnee1 = 100;
private String donnee2 = "bonjour";
public static void main(String[] args) {
TestObjetVersJson obj = new TestObjetVersJson();
Gson gson = new Gson();
//convertir un objet java en format JSON
String json = gson.toJson(obj);
System.out.println(json);
}
}
Sortie
{"donnee1":100,"donnee2":"bonjour"}
Ressources:
Page d'accueil du projet Google Gson
"Si vous demandez de traiter côté client, cela dépend de votre langage de programmation. Par exemple, avec Java, vous pouvez utiliser google-gson" Je pense que vous vouliez probablement dire "serveur" plutôt que "client". Et il a en effet tagué sa question "Java".
+1. J'ai utilisé Gson dans 4 à 5 projets maintenant, dans des contextes assez différents, côté serveur et côté client (également dans une application Android), et cela ne m'a jamais laissé tomber. Très belle & propre lib.
Si vous souhaitez utiliser gson mais n'avez pas de classe POJO prédéfinie (c'est-à-dire que vous avez un JSON générique sans structure prédéfinie), cette réponse peut vous aider - stackoverflow.com/questions/4110664/…
Il existe différents sérialiseurs et désérialiseurs Java JSON liés à la page d'accueil JSON.
À ce jour, il y en a 22 :
...mais bien sûr, la liste peut changer.
J'aime utiliser google-gson pour cela, et c'est précisément parce que je n'ai pas besoin de travailler directement avec JSONObject.
Dans ce cas, j'aurais une classe qui correspondra aux propriétés de votre objet JSON
class Phone {
public String phonetype;
public String cat;
}
...
String jsonString = "{\"phonetype\":\"N95\",\"cat\":\"WP\"}";
Gson gson = new Gson();
Phone fooFromJson = gson.fromJson(jsonString, Phone.class);
...
Cependant, je pense que votre question est plutôt, Comment obtenir un véritable objet JSONObject à partir d'une chaîne JSON.
J'ai regardé l'API google-json et je n'ai rien trouvé aussi simple et direct que l'API org.json, que vous voudrez probablement utiliser si vous avez vraiment besoin d'utiliser un JSONObject minimaliste.
http://www.json.org/javadoc/org/json/JSONObject.html
Avec org.json.JSONObject (une autre API complètement différente) Si vous voulez faire quelque chose comme...
JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
System.out.println(jsonObject.getString("phonetype"));
Je pense que la beauté de google-gson est que vous n'avez pas besoin de travailler avec JSONObject. Il vous suffit de récupérer json, de passer la classe que vous souhaitez désérialiser, et les attributs de votre classe seront assortis au JSON, mais encore une fois, chacun a ses propres exigences, peut-être que vous ne pouvez pas vous permettre le luxe d'avoir des classes pré-mappées du côté de la désérialisation parce que les choses pourraient être trop dynamiques du côté de la génération JSON. Dans ce cas, utilisez simplement json.org.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
1 votes
Non, c'est juste, car je voulais créer un objet JSON à partir d'une chaîne JSON, la réponse donnée par dogbane a montré la bonne voie pour répondre.
0 votes
Les deux réponses de Mappan et de dogbane sont correctes mais ils utilisent des modules différents. Vous devez être prudent pour importer le module correct pour chacun car il existe de nombreux modules JSONObject.
0 votes
J'ai essayé avec la bibliothèque GSON. Veuillez vérifier ce lien.
0 votes
Voici une courte vidéo qui montre comment créer un JSONObject en Java en utilisant org.json.