554 votes

Comment convertir jsonString en JSONObject en Java

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!

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.

851voto

dogbane Points 85749

En utilisant la bibliothèque org.json:

try {
     JSONObject jsonObject = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
}catch (JSONException err){
     Log.d("Erreur", err.toString());
}

11 votes

J'ai essayé avec comme ça JSONObject js=new JSONObject(jsonstring); mais ça montre une erreur. sur jsonstring

0 votes

Avez-vous échappé aux guillemets dans votre chaîne de caractères comme je l'ai fait ?

39 votes

Il a obtenu une erreur car il n'utilise pas org.json, il utilise google-gson qui ne fonctionne pas de cette manière.

207voto

Mappan Points 196

Pour toute personne cherchant toujours une réponse:

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);

33 votes

Et pouvez-vous s'il vous plaît mentionner quel package importer pour la même chose?

18 votes

Cela fonctionne pour moi avec: import org.json.simple.JSONObject

2 votes

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.

56voto

kamaci Points 10526

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

Guide de l'utilisateur de Gson

Exemple

0 votes

"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".

0 votes

+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.

0 votes

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/…

45voto

T.J. Crowder Points 285826

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.

12voto

Gubatron Points 1333

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.com

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.

Powered by:

X