Comment convertir ou convertir une table de hachage en objet JSON en Java, et à nouveau convertir l'objet JSON en chaîne JSON?
288
Vous pouvez utiliser:
new JSONObject(map);
Attention: cela ne fonctionnera queMap<String, String>!
Autres fonctions que vous pouvez obtenir à partir de sa documentation
http://stleary.github.io/JSON-java/index.html
Map
dansJSONObject
mais comment pouvez-vous obtenir cette carte de jsonObject?Gson peut également être utilisé pour sérialiser des objets arbitrairement complexes.
Voici comment vous l'utilisez:
Gson
convertira automatiquement les collections enJSON
tableaux. Gson peut sérialiser des champs privés et ignore automatiquement les champs transitoires.la source
Exemple utilisant json
production::
Vous pouvez également essayer d'utiliser GSON de Google.Le GSON de Google est la meilleure bibliothèque disponible pour convertir des objets Java en leur représentation JSON.
http://code.google.com/p/google-gson/
la source
2
fait dans lejson.toString(
2`)Vous pouvez convertir
Map
enJSON
utilisantJackson
comme suit:Dépendances Maven pour
Jackson
:Si vous utilisez une
JSONObject
bibliothèque, vous pouvez convertir la carteJSON
comme suit:Dépendances Maven pour
JSONObject
:J'espère que cela vous aidera. Codage heureux.
la source
Dans mon cas, je ne voulais pas de dépendances. En utilisant Java 8, vous pouvez obtenir JSON sous forme de chaîne aussi simple:
la source
"
, cela casseVous pouvez simplement énumérer la carte et ajouter les paires clé-valeur au JSONObject
Méthode :
la source
La bibliothèque Underscore-java peut convertir une carte de hachage ou une liste de tableaux en json et vice versa.
la source
À la fin de la partie , mais voici mon GSON écrivain adhoc pour sérialisation hashmap. J'ai dû écrire une carte de paires clé-valeur en tant qu'attributs de chaîne json, s'attendre à ce qu'un spécifique soit de type entier. Je ne voulais pas créer de wrapper JavaBean personnalisé pour cette simple utilisation.
La classe GSON JsonWriter est une classe sérialiseur facile à utiliser contenant peu de fonctions writer.value () fortement typées.
Si aucun des types personnalisés n'était nécessaire, j'aurais pu simplement utiliser la fonction toJson (). La bibliothèque gson-2.2.4.jar fait un peu moins de 190 Ko sans dépendances brutales. Facile à utiliser sur n'importe quelle application de servlet personnalisée ou application autonome sans grandes intégrations de framework.
la source
C'est généralement le travail d'une bibliothèque Json, vous ne devriez pas essayer de le faire vous-même. Toutes les bibliothèques json doivent implémenter ce que vous demandez, et vous pouvez trouver une liste des bibliothèques Java Json sur json.org , au bas de la page.
la source
J'ai trouvé un autre moyen de le gérer.
J'espère que cela t'aides.
Merci.
la source
Si vous en avez besoin, utilisez-le dans le code.
la source
Pour ceux qui utilisent
org.json.simple.JSONObject
, vous pouvez convertir la carte en Json String et l'analyser pour obtenir leJSONObject
.la source
Mieux vaut être en retard que jamais. J'ai utilisé GSON pour convertir la liste de HashMap en chaîne si vous souhaitez avoir une liste sérialisée.
Cela
json
produit[{"key":"value","key":"value","key":"value"}]
la source
Gson
.Voici ma solution monoligne avec GSON:
la source
Cette solution fonctionne avec des JSON complexes:
la source
nous utilisons Gson.
la source
Vous pouvez utiliser XStream - c'est vraiment pratique. Voir les exemples ici
la source
Si vous utilisez,
net.sf.json.JSONObject
vous ne trouverez pas deJSONObject(map)
constructeur dedans. Vous devez utiliser lapublic static JSONObject fromObject( Object object )
méthode. Cette méthode accepte les chaînes au format JSON, Maps, DynaBeans et JavaBeans.JSONObject jsonObject = JSONObject.fromObject(myMap);
la source
Si vous utilisez des objets complexes, vous devez appliquer enableComplexMapKeySerialization () , comme indiqué dans https://stackoverflow.com/a/24635655/2914140 et https://stackoverflow.com/a/26374888/2914140 .
La sortie sera:
la source
Pas besoin de bibliothèques d'analyse Gson ou JSON. En utilisant simplement
new JSONObject(Map<String, JSONObject>).toString()
, par exemple:la source
la source
Si vous n'avez pas vraiment besoin de HashMap, vous pouvez faire quelque chose comme ça:
Production:
la source
HashMap
, et cela ne répond pas à cela.J'utilise Alibaba fastjson, facile et simple:
et importer:
Ensuite:
Tout va bien.
la source
Si vous utilisez JSR 374: API Java pour le traitement JSON (javax json) Cela semble faire l'affaire:
la source
Vous pouvez utiliser Gson . Cette bibliothèque fournit des méthodes simples pour convertir des objets Java en objets JSON et vice-versa.
Exemple:
Vous pouvez utiliser un GsonBuilder lorsque vous devez définir des options de configuration autres que celles par défaut. Dans l'exemple ci-dessus, le processus de conversion sérialise également les attributs nuls de l'objet.
Cependant, cette approche ne fonctionne que pour les types non génériques. Pour les types génériques, vous devez utiliser toJson (objet, Type).
Plus d'informations sur Gson ici .
N'oubliez pas que l'objet doit implémenter l' interface Serializable .
la source
cela fonctionne pour moi:
la source
Façon Gson pour des cartes et des listes un peu plus complexes en utilisant la méthode TypeToken.getParameterized :
Nous avons une carte qui ressemble à ceci:
Nous obtenons le type en utilisant le mentionné ci-dessus méthode getParameterized comme ceci:
Et puis utilisez l'objet Gson fromJson méthode comme ceci en utilisant l' objet mapOfList comme ceci:
L'objet mentionné NewFile ressemble à ceci:
Le JSON désérialisé ressemble à ceci:
la source
J'ai rencontré un problème similaire lors de la désérialisation de la réponse des commandes personnalisées en sélénium. La réponse était json, mais le sélénium traduit cela en interne en java.util.HashMap [String, Object]
Si vous êtes familier avec scala et utilisez l'API play pour JSON, vous pourriez en bénéficier:
Description du petit code:
Le code parcourt récursivement le HashMap jusqu'à ce que les types de base (String, Integer, Boolean) soient trouvés. Ces types de base peuvent être directement enveloppés dans un JsObject. Lorsque la récursivité est dépliée, la fusion profonde concatène les objets créés.
'@unchecked' prend en charge les avertissements d'effacement de type.
la source
Convertissez d'abord tous vos objets en chaînes valides
Ensuite, insérez la carte entière dans un org.json.JSONObject
Vous pouvez maintenant obtenir le JSON en appelant simplement toString de l'objet
Créer un nouveau JSONObject
Ou comme un tableau d'octets pour l'envoi via HTTP
la source