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...
15 réponses
Pour quiconque cherche toujours une réponse:
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(stringToParse);
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:
il existe plusieurs sérialiseurs et desérialiseurs Java JSON liés à la page D'accueil JSON .
de cette écriture, il y a ces 20:
- org.json
- org.json.moi
- Jackson JSON Processor
- Json-lib
- JSON Tools
- JSON-simple
- Stringtree
- SOJO
- Restlet
- Larguer
- json-taglib
- XStream
- Jsonmarsaller
- Flexjson
- JON outils
- google-gson
- Argo
- Pivot
- jsonij
- fastjson
...mais bien sûr, la liste peut changer.
Java 7 solution
import javax.json.*;
...
String TEXT;
JsonObject body = Json.createReader(new StringReader(TEXT)).readObject()
;
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.
vous devez importer org.json
JSONObject jsonObj = null;
try {
jsonObj = new JSONObject("{\"phonetype\":\"N95\",\"cat\":\"WP\"}");
} catch (JSONException e) {
e.printStackTrace();
}
pour convertir String
en JSONObject
il suffit de passer l'instance String
au constructeur de JSONObject
.
par exemple:
JSONObject jsonObj = new JSONObject("your string");
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.
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"}
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);
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
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.
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(
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.