Comment convertir jsonString en JSONObject en Java


J'ai une variable de Chaîne appelée jsonString:

{"phonetype":"N95","cat":"WP"}

Maintenant, je veux le convertir en objet JSON. J'ai cherché plus sur Google mais je n'ai obtenu aucune réponse attendue...

Author: Raj Rajeshwar Singh Rathore, 2011-03-09

15 answers

En utilisant org.bibliothèque json :

JSONObject jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
 523
Author: dogbane, 2018-01-16 10:42:46

À tous ceux qui cherchent encore une réponse:

JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
 119
Author: Mappan, 2014-09-30 01:01:02

, Vous pouvez utiliser google-gson. Détails:

Exemples D'Objets

class BagOfPrimitives {
  private int value1 = 1;
  private String value2 = "abc";
  private transient int value3 = 3;
  BagOfPrimitives() {
    // no-args constructor
  }
}

(la Sérialisation)

BagOfPrimitives obj = new BagOfPrimitives();
Gson gson = new Gson();
String json = gson.toJson(obj); 
==> json is {"value1":1,"value2":"abc"}

Notez que vous ne pouvez pas sérialiser des objets avec des références circulaires car cela entraînera une récursivité infinie.

(la Désérialisation)

BagOfPrimitives obj2 = gson.fromJson(json, BagOfPrimitives.class);  
==> obj2 is just like obj

un Autre exemple pour Gson:

Gson est facile à apprendre et à mettre en œuvre, vous devez savoir est les deux méthodes suivantes:

- > toJson () - convertir un objet java en Format JSON

-> fromJson() – convertir JSON en objet java

import com.google.gson.Gson;

public class TestObjectToJson {
  private int data1 = 100;
  private String data2 = "hello";

  public static void main(String[] args) {
      TestObjectToJson obj = new TestObjectToJson();
      Gson gson = new Gson();

      //convert java object to JSON format
      String json = gson.toJson(obj);

      System.out.println(json);
  }

}

Sortie

{"data1":100,"data2":"hello"}

Ressources:

Accueil du projet Google Gson

Guide de l'utilisateur Gson

Exemple

 39
Author: kamaci, 2011-03-09 13:16:14

Il existe différents sérialiseurs et désérialiseurs Java JSON liés à partir de la page d'accueil JSON.

Au moment d'écrire ces lignes, il y a ces 20:

...mais bien sûr, la liste peut changer.

 28
Author: T.J. Crowder, 2012-05-20 13:34:29

Solution Java 7

import javax.json.*;

...

String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()

;

 22
Author: RSG, 2015-03-23 17:48:05

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 ressemble plus à, Comment puis-je endup avec un objet JSONObject réel à partir d'une chaîne JSON.

Je regardais l'api google-json et je ne trouvais rien d'aussi simple que org.json api qui est probablement ce que vous voulez être en utilisant si vous avez si fortement besoin d'utiliser un JSONObject barebones.

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 traiter avec JSONObject. Vous saisissez simplement json, passez la classe dans laquelle vous souhaitez désérialiser, et vos attributs de classe seront appariés au JSON, mais encore une fois, tout le monde a leurs 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 car les choses pourraient être trop dynamiques du côté de la génération JSON. Dans ce cas il suffit d'utiliser json.org.

 9
Author: Gubatron, 2011-03-09 13:23:36

Vous devez importer org.json

JSONObject jsonObj = null;
        try {
            jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
        } catch (JSONException e) {
            e.printStackTrace();
        }
 8
Author: Cabezas, 2014-09-11 10:21:30

Pour convertir String dans JSONObject vous avez juste besoin de passer le String exemple dans le Constructeur de JSONObject.

Par exemple:

JSONObject jsonObj = new JSONObject("your string");
 8
Author: Charu, 2016-12-20 04:31:23

Si vous utilisez http://json-lib.sourceforge.net (net.sf.json.JSONObject)

C'est assez facile:

String myJsonString;
JSONObject json = JSONObject.fromObject(myJsonString);

Ou

JSONObject json = JSONSerializer.toJSON(myJsonString);

Obtenir les valeurs alors avec json.getString (param), json.getInt (param) et ainsi de suite.

 3
Author: Thero, 2013-04-03 11:07:36

Utilisez JsonNode de fasterxml pour l'analyse Json générique. Il crée en interne une carte de la valeur clé pour toutes les entrées.

Exemple:

private void test(@RequestBody JsonNode node)

Chaîne d'entrée:

{"a":"b","c":"d"}
 3
Author: Vishnu, 2016-09-08 14:05:59

Pour convertir une chaîne json et la piqûre est comme json. {"phonetype":"N95","cat":"WP"}

String Data=response.getEntity().getText().toString(); // reading the string value 
JSONObject json = (JSONObject) new JSONParser().parse(Data);
String x=(String) json.get("phonetype");
System.out.println("Check Data"+x);
String y=(String) json.get("cat");
System.out.println("Check Data"+y);
 2
Author: Aravind Cheekkallur, 2013-10-10 05:49:54

Pour définir un objet unique json sur list ie

"locations":{

}

À List<Location>

Utiliser

ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);

Jackson.mapper-asl-1.9.7.jar

 0
Author: user3012570, 2014-01-06 13:22:10

NOTEZ que GSON avec la désérialisation d'une interface entraînera une exception comme ci-dessous.

"java.lang.RuntimeException: Unable to invoke no-args constructor for interface XXX. Register an InstanceCreator with Gson for this type may fix this problem."

While deserialize; GSON ne sait pas quel objet doit être intantiaté pour cette interface.

Ceci est résolu d'une manière ou d'une autre ici.

Cependant FlexJSON a cette solution intrinsèquement. tout en sérialisant le temps, il ajoute un nom de classe dans le cadre de json comme ci-dessous.

{
    "HTTPStatus": "OK",
    "class": "com.XXX.YYY.HTTPViewResponse",
    "code": null,
    "outputContext": {
        "class": "com.XXX.YYY.ZZZ.OutputSuccessContext",
        "eligible": true
    }
}

Donc JSON sera cumber certains; mais vous n'avez pas besoin d'écrire InstanceCreator qui est requis dans GSON.

 0
Author: Kanagavelu Sugumar, 2017-05-23 11:47:29

Pas besoin d'utiliser une bibliothèque externe.

Vous pouvez utiliser cette classe à la place:) (gère même les listes , les listes imbriquées et json)

public class Utility {

    public static Map<String, Object> jsonToMap(Object json) throws JSONException {

        if(json instanceof JSONObject)
            return _jsonToMap_((JSONObject)json) ;

        else if (json instanceof String)
        {
            JSONObject jsonObject = new JSONObject((String)json) ;
            return _jsonToMap_(jsonObject) ;
        }
        return null ;
    }


   private static Map<String, Object> _jsonToMap_(JSONObject json) throws JSONException {
        Map<String, Object> retMap = new HashMap<String, Object>();

        if(json != JSONObject.NULL) {
            retMap = toMap(json);
        }
        return retMap;
    }


    private static Map<String, Object> toMap(JSONObject object) throws JSONException {
        Map<String, Object> map = new HashMap<String, Object>();

        Iterator<String> keysItr = object.keys();
        while(keysItr.hasNext()) {
            String key = keysItr.next();
            Object value = object.get(key);

            if(value instanceof JSONArray) {
                value = toList((JSONArray) value);
            }

            else if(value instanceof JSONObject) {
                value = toMap((JSONObject) value);
            }
            map.put(key, value);
        }
        return map;
    }


    public static List<Object> toList(JSONArray array) throws JSONException {
        List<Object> list = new ArrayList<Object>();
        for(int i = 0; i < array.length(); i++) {
            Object value = array.get(i);
            if(value instanceof JSONArray) {
                value = toList((JSONArray) value);
            }

            else if(value instanceof JSONObject) {
                value = toMap((JSONObject) value);
            }
            list.add(value);
        }
        return list;
    }
}

Pour convertir votre chaîne JSON en hashmap utilisez ceci:

HashMap<String, Object> hashMap = new HashMap<>(Utility.jsonToMap(
 0
Author: Natesh bhat, 2018-07-01 07:59:31

Mieux vaut aller avec une manière plus simple en utilisant org.json lib. Faites simplement une approche très simple comme ci-dessous:

JSONObject obj = new JSONObject();
obj.put("phonetype", "N95");
obj.put("cat", "WP");

Maintenant obj est convertie JSONObject forme de votre Chaîne. C'est le cas si vous avez des paires nom-valeur.

Pour une chaîne, vous pouvez passer directement au constructeur de JSONObject. Si ce sera un json String valide, alors ok sinon il lèvera une exception.

 -1
Author: TheLittleNaruto, 2014-11-11 12:58:55