Comment convertir jsonString en JSONObject en Java

j'ai la variable String appelée jsonString :

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

maintenant je veux le convertir en objet JSON. J'ai cherché plus sur Google mais n'ai pas obtenu de réponses attendues...

301
demandé sur Raj Rajeshwar Singh Rathore 2011-03-09 15:33:48

15 réponses

à l'Aide org.JSON bibliothèque:

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

Pour quiconque cherche toujours une réponse:

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

vous pouvez utiliser google-gson . Details:

Exemples D'Objets

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

(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 les objets avec des références circulaires car cela entraînera une récursion infinie.

(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:

-> la méthode toJson() – convertir en objet java au format JSON

-> fromJson() – convertir en 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:

Google Gson Page D'Accueil Du Projet

Gson Guide De L'Utilisateur

exemple

39
répondu kamaci 2011-03-09 13:16:14

Java 7 solution

import javax.json.*;

...

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

;

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

je regardais l'api google-json et je n'ai rien trouvé d'aussi simple avant que org.api de json qui est probablement ce que vous voulez utiliser si vous êtes si fortement dans le 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 venez de attrapez JSON, passez la classe pour vouloir la desérialiser, et vos attributs de classe seront adapté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 desérialisation parce que les choses pourraient être trop dynamique du côté générateur de JSON. Dans ce cas, utilisez json.org.

9
répondu 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
répondu Cabezas 2014-09-11 10:21:30

pour convertir String en JSONObject il suffit de passer l'instance String au constructeur de JSONObject .

par exemple:

JSONObject jsonObj = new JSONObject("your string");
8
répondu 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
répondu Thero 2013-04-03 11:07:36

utilisez le jsonnode de fasterxml pour le JSON Générique. Il crée en interne une carte de valeur clé pour toutes les entrées.

exemple:

private void test(@RequestBody JsonNode node)

chaîne de saisie:

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

pour convertir une chaîne en json et le dard 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
répondu Aravind Cheekkallur 2013-10-10 05:49:54

pour définir un objet JSON à la liste c'est à dire

"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
répondu user3012570 2014-01-06 13:22:10

notez que GSON avec la désérialisation d'une interface résultera en 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."

tandis que deserialize; GSON ne sait pas quel objet doit être intantiated pour cette interface.

ceci est résolu d'une façon ou d'une autre ici .

Toutefois FlexJSON a cette solution intrinsèquement. pendant que serialize time, 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 un peu cumber; mais vous n'avez pas besoin d'écrire InstanceCreator qui est requis dans GSON.

0
répondu Kanagavelu Sugumar 2017-05-23 11:47:29

Pas besoin d'utiliser une bibliothèque externe.

vous pouvez utiliser cette classe à la place de:) (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
répondu Natesh bhat 2018-07-01 07:59:31

il est préférable de suivre une méthode plus simple en utilisant org.json lib. Il suffit de faire une approche très simple comme ci-dessous:

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

maintenant obj est votre conversion JSONObject forme de votre chaîne respective. C'est dans le cas où vous avez des paires nom-valeur.

pour une chaîne de caractères, vous pouvez passer directement au constructeur de JSONObject . Si ce sera un json String valide, alors d'accord, sinon ça fera une exception.

-1
répondu TheLittleNaruto 2014-11-11 12:58:55