Non, c'est vrai, parce que 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.
M. Sajid Shaikh
Les réponses de Mappan et de Dogbane sont correctes mais utilisent des modules différents. Vous devez faire attention à importer le module correct pour chacun car il existe de nombreux modules JSONObject.
Arashsoft
J'ai essayé avec la bibliothèque GSON. Veuillez vérifier ce lien .
Et pouvez-vous s'il vous plaît mentionner quel package importer pour la même chose?
phishing passé
10
Cela fonctionne pour moi avec:import org.json.simple.JSONObject
Mafro34
1
La version 1.1.1 de json-simple semble avoir un problème. Ce qui précède donne "Exception non gérée" pour parser.parse(et veut essayer-attraper ou lancer. Mais lorsque vous ajoutez l'un ou l'autre, cela donne une Unhandled exception type ParseExceptionerreur, ou une erreur NoClassDefFound pour ParseException org.json.simple.parsermême lorsque vous avez json-simple dans les dépendances Maven et clairement visible dans la bibliothèque du projet.
Juha Untinen
2
org.json est une bibliothèque de preuve de concept. c'est l'un des pires en termes de performances et de fonctionnalités. Il faut regarder l'ensemble des fonctionnalités et les performances d'une bibliothèque json avant de choisir. Voir ce benchmark que j'ai fait en utilisant JMH: github.com/fabienrenaud/java-json-benchmark Il montre clairement jackson plus rapidement que toute autre chose et 5 à 6 fois plus rapide que org.json.
fabien
5
Analyseur JSONParser = new JSONParser (); semble privé
"Si vous demandez à 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 marqué sa question "Java".
TJ Crowder
+1. J'ai utilisé Gson dans 4 à 5 projets maintenant, dans des contextes très différents, côté serveur et côté client (également dans l'application Android), et cela ne m'a jamais échoué. Lib très agréable et propre.
Jonik
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/…
Leandro David
40
Il existe différents sérialiseurs et désérialiseurs Java JSON liés à partir de la page d'accueil JSON .
Cependant, je pense que votre question ressemble plus à: Comment puis-je me retrouver avec un véritable objet JSONObject à partir d'une chaîne JSON.
Je regardais l'api google-json et je n'ai rien trouvé d'aussi simple que l'api org.json qui est probablement ce que vous voulez utiliser si vous avez tellement besoin d'utiliser un JSONObject barebones.
Je pense que la beauté de google-gson est que vous n'avez pas besoin de traiter avec JSONObject. Vous prenez juste json, passez la classe pour désérialiser, et vos attributs de classe seront mis en correspondance avec le JSON, mais là encore, tout le monde 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, car les choses peuvent être trop dynamiques du côté de la génération JSON. Dans ce cas, utilisez simplement json.org.
(2) Convertir la chaîne JSON en objet JSON (JsonNode)
publicstaticJsonNode stringToJSONObject(String jsonString)throwsException{ObjectMapper jacksonObjMapper =newObjectMapper();return jacksonObjMapper.readTree(jsonString);}//Example:String jsonString ="{\"phonetype\":\"N95\",\"cat\":\"WP\"}";JsonNode jsonNode = stringToJSONObject(jsonString);Assert.assertEquals("Phonetype value not legit!","N95", jsonNode.get("phonetype").getTextValue());Assert.assertEquals("Cat value is tragic!","WP", jsonNode.get("cat").getTextValue());
REMARQUE: GSON avec 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."
Pendant la désérialisation; GSON ne sait pas quel objet doit être créé 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 le nom de classe dans le cadre de json comme ci-dessous.
Maintenant, objc'est votre JSONObjectforme convertie de votre chaîne respective. C'est le cas si vous avez des paires nom-valeur.
Pour une chaîne, vous pouvez directement passer au constructeur de JSONObject. Si ce sera valide json String, alors d'accord, sinon, cela lèvera une exception.
Réponses:
Utilisation de la bibliothèque org.json :
la source
JsonObject obj = new JsonParser().parse(jsonString).getAsJsonObject();
À tous ceux qui recherchent toujours une réponse:
la source
import org.json.simple.JSONObject
parser.parse(
et veut essayer-attraper ou lancer. Mais lorsque vous ajoutez l'un ou l'autre, cela donne uneUnhandled exception type ParseException
erreur, ou une erreur NoClassDefFound pour ParseExceptionorg.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
(Sérialisation)
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)
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 au format JSON
-> fromJson () - convertir JSON en objet java
Production
Ressources:
Page d'accueil du projet Google Gson
Guide de l'utilisateur Gson
Exemple
la source
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 en a 22:
... mais bien sûr la liste peut changer.
la source
Solution Java 7
;
la source
Pour convertir
String
en ilJSONObject
vous suffit de passer l'String
exemple dans Constructor deJSONObject
.Par exemple:
la source
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
Cependant, je pense que votre question ressemble plus à: Comment puis-je me retrouver avec un véritable objet JSONObject à partir d'une chaîne JSON.
Je regardais l'api google-json et je n'ai rien trouvé d'aussi simple que l'api org.json qui est probablement ce que vous voulez utiliser si vous avez tellement 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 ...
Je pense que la beauté de google-gson est que vous n'avez pas besoin de traiter avec JSONObject. Vous prenez juste json, passez la classe pour désérialiser, et vos attributs de classe seront mis en correspondance avec le JSON, mais là encore, tout le monde 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, car les choses peuvent être trop dynamiques du côté de la génération JSON. Dans ce cas, utilisez simplement json.org.
la source
vous devez importer org.json
la source
Chaîne en JSON en utilisant
Jackson
aveccom.fasterxml.jackson.databind
:En supposant que votre chaîne json représente comme ceci: jsonString = {"phonetype": "N95", "cat": "WP"}
la source
Si vous utilisez http://json-lib.sourceforge.net (net.sf.json.JSONObject)
c'est assez simple:
ou
récupérez ensuite les valeurs avec json.getString (param), json.getInt (param) et ainsi de suite.
la source
Pour convertir une chaîne en json et la piqûre est comme json. {"phonetype": "N95", "cat": "WP"}
la source
Utilisez JsonNode de fastxml pour l'analyse générique Json. Il crée en interne une carte de valeur clé pour toutes les entrées.
Exemple:
chaîne d'entrée:
la source
Pas besoin d'utiliser une bibliothèque externe.
Vous pouvez utiliser cette classe à la place :) (gère les listes paires, les listes imbriquées et json)
Pour convertir votre chaîne JSON en hashmap, utilisez ceci:
la source
Codehaus Jackson - Je suis cette API géniale depuis 2012 pour mes tests de service Web RESTful et JUnit. Avec leur API, vous pouvez:
(1) Convertir la chaîne JSON en bean Java
(2) Convertir la chaîne JSON en objet JSON (JsonNode)
(3) Convertir le bean Java en chaîne JSON
REFS:
Codehaus Jackson
API JsonNode - Comment utiliser, naviguer, analyser et évaluer les valeurs d'un objet JsonNode
Tutoriel - Tutoriel simple comment utiliser Jackson pour convertir une chaîne JSON en JsonNode
la source
REMARQUE: GSON avec désérialisation d'une interface entraînera une exception comme ci-dessous.
Pendant la désérialisation; GSON ne sait pas quel objet doit être créé 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 le nom de classe dans le cadre de json comme ci-dessous.
JSON sera donc un peu plus lourd; mais vous n'avez pas besoin d'écrire
InstanceCreator
qui est requis dans GSON.la source
Utiliser org.json
Si vous avez une chaîne contenant du texte au format JSON, vous pouvez obtenir un objet JSON en procédant comme suit:
Maintenant, pour accéder au type de téléphone
la source
Pour définir json single object à lister ie
pour
List<Location>
utilisation
jackson.mapper-asl-1.9.7.jar
la source
la source
Mieux aller avec une manière plus simple en utilisant
org.json
lib. Faites simplement une approche très simple comme ci-dessous:Maintenant,
obj
c'est votreJSONObject
forme convertie de votre chaîne respective. C'est le cas si vous avez des paires nom-valeur.Pour une chaîne, vous pouvez directement passer au constructeur de
JSONObject
. Si ce sera validejson String
, alors d'accord, sinon, cela lèvera une exception.la source
user.put("email", "[email protected]")
déclenche une exception non gérée.try {JSONObject jObj = new JSONObject();} catch (JSONException e) {Log.e("MYAPP", "unexpected JSON exception", e);// Do something to recover.}