Comment parser du JSON en Java
J'ai le texte suivant JSON texte. Comment puis-je analyser pour obtenir les valeurs de pageName
, pagePic
, post_id
, etc.?
{
"pageInfo": {
"pageName": "abc",
"pagePic": "http://example.com/content.jpg"
},
"posts": [
{
"post_id": "123456789012_123456789012",
"actor_id": "1234567890",
"picOfPersonWhoPosted": "http://example.com/photo.jpg",
"nameOfPersonWhoPosted": "Jane Doe",
"message": "Sounds cool. Can't wait to see it!",
"likesCount": "2",
"comments": [],
"timeOfPost": "1234567890"
}
]
}
java est construit en JSON sont des bibliothèques quickets façon de le faire, mais dans mon expérience de GSON est le meilleur de la bibliothèque pour l'analyse d'une JSON dans un POJO sans douleur.
Cette question était vraiment trop large et "écrire le code pour moi", qui conduit à un désordre de la confusion et de la divergence des réponses ci-dessous. Cette question aurait été fermé pour être trop large et l'auteur fait aucun effort pour le résoudre eux-mêmes, montrant pas de devoirs.
C'est la première très voté et protégé question dont les réponses que j'ai trouvé le plus déroutant
d'accord. Demandé mod intervention. Cela devrait être fermée vraiment. J'ai d'abord cru (à tort) que je ne pouvais pas le faire alors que la question était protégé, j'ai donc non protégé et fait mon truc. Re-protégé pour empêcher des réponses rep exemple, lors de l'attente pour un mod.
Cette question est discuté sur Meta.
Cette question était vraiment trop large et "écrire le code pour moi", qui conduit à un désordre de la confusion et de la divergence des réponses ci-dessous. Cette question aurait été fermé pour être trop large et l'auteur fait aucun effort pour le résoudre eux-mêmes, montrant pas de devoirs.
C'est la première très voté et protégé question dont les réponses que j'ai trouvé le plus déroutant
d'accord. Demandé mod intervention. Cela devrait être fermée vraiment. J'ai d'abord cru (à tort) que je ne pouvais pas le faire alors que la question était protégé, j'ai donc non protégé et fait mon truc. Re-protégé pour empêcher des réponses rep exemple, lors de l'attente pour un mod.
Cette question est discuté sur Meta.
OriginalL'auteur Muhammad Maqsoodur Rehman | 2010-04-07
Vous devez vous connecter pour publier un commentaire.
La org.json bibliothèque est facile à utiliser. Exemple de code ci-dessous:
Vous pouvez trouver plus d'exemples de: Parser JSON en Java
Téléchargeable jar: http://mvnrepository.com/artifact/org.json/json
Je choisirais
org.json
rapport à d'autres bibliothèques pour un simple JSON l'analyse sans la regarder. C'est la bibliothèque de référence, que Douglas Crockford (JSON découvreur) créé.c'est tout simplement ridicule. C'est une preuve-de-concept avec maladroite de l'API, l'inefficacité de la mise en œuvre. Je pense qu'il est préférable d'envisager des bibliothèques sur leurs propres mérites, au lieu d'essayer d'en déduire la qualité de ses auteurs visibilité -- Doug a réalisé de nombreuses choses, mais qui ne change pas vraiment les qualités de l'lib. Il y a 10 ans c'était le seul jeu dans la ville, mais depuis il y a eu beaucoup de progrès. C'est comme les jambes de force de json libs.
org.json est parmi les pires json bibliothèques. On doit examiner l'ensemble des fonctionnalités et des performances de disponible json bibliothèques avant de choisir. Ici est un point de référence, je n'en comparant jackson, gson, org.json, genson à l'aide de JMH: github.com/fabienrenaud/java-json-benchmark. jackson est le gagnant clair ici.
La Licence ne comprend pas tout couramment utilisées des licences Open Source, et il est également titulaire des droits d'auteur.
OriginalL'auteur user1931858
Pour le bien de l'exemple, supposons que vous avez une classe
Person
avec juste unname
.Google GSON (Maven)
Mon préféré de la grande JSON de la sérialisation /dé-sérialisation d'objets.
Mise à jour
Si vous voulez obtenir un seul attribut, vous pouvez le faire facilement avec la bibliothèque de Google ainsi:
Org.JSON (Maven)
Si vous n'avez pas besoin de l'objet de la sérialisation, mais tout simplement de passer un attribut, vous pouvez essayer de org.json (ou regarder GSON exemple ci-dessus!)
Jackson (Maven)
JsonNode
s, GSON a quelque chose de similaire). Peut-être bien de montrer des extraits, qui est similaire à la seule façon org.json offre.Deux autres bibliothèques de la peine de mentionner (dans l'intérêt de l'exhaustivité): json simple et Oracle JSONP
pourquoi? Il me semble que cette réponse suppose l'on a déjà défini une classe Java qui contient exactement les mêmes champs que la chaîne JSON, rien de moins et rien de plus. C'est tout à fait une hypothèse forte.
json simple et oracle jsonp effectuer terriblement: github.com/fabienrenaud/java-json-benchmark Pour les performances, choisissez jackson ou dsljson.
GSON ne prend pas en charge le filtrage dynamique des champs sur des niveaux autres que root!
OriginalL'auteur SDekov
Si l'on veut créer un objet Java à partir de JSON et vice versa, utiliser GSON ou JACKSON tiers des pots etc.
Mais si l'on veux juste d'analyser une chaîne JSON et d'obtenir certaines valeurs, (OU de créer une chaîne JSON à partir de zéro à envoyer sur le fil) utilisation JaveEE jar qui contient JsonReader, JsonArray, JsonObject etc. Vous pouvez télécharger la mise en œuvre de cette spécification comme javax.json. Avec ces deux pots, je suis capable de parser le json et utiliser les valeurs.
Ces Api en fait de suivre les DOM/SAX de l'analyse du modèle de données XML.
Remarque: Jackson et GSON à la fois de support de l'arbre de style et/ou de Cartes/les Listes de liaison, donc il n'est pas nécessaire d'utiliser Java EE (javax.json). javax.json a peu à offrir au-delà de Jackson ou de GSON.
Je vous suggère d'ajouter un lien vers les JavaEE de la bibliothèque.
OriginalL'auteur nondescript
rapide-parser json est très simple, flexible, très rapide et personnalisable. Essayez
Caractéristiques:
Il peut être utilisé comme ceci:
Ce package ne peut pas gérer des valeurs vides lors de l'analyse. Par exemple: ... "description":"" ... déclenche une Exception
J'ai résolu ce problème (et de nombreux autres) dans le code.google.com/p/quick-json/issues/detail?id=11 j'espère que l'auteur va donner prendre le temps de le corriger dans la version officielle.
Des caractéristiques, rien n'est unique par rapport à d'autres options -- et la revendication de haute performance n'est pas pris en charge par quoi que ce soit; à l'inverse pour les plus matures bibliothèques (Gson, Jackson, Genson, dany Boon) qui sont inclus dans les benchmarks comme github.com/eishay/jvm-serializers, github.com/novoj/JavaJsonPerformanceTest ou developer.com/lang/jscript/... -- je n'ai pas vu cette bibliothèque inclus dans les tests, ou des mentions d'être largement utilisé.
Ce projet semble mort et ne semblent plus accueilli dans le central repository Maven.
OriginalL'auteur rputta
Une Explication
Vous pouvez utiliser Jackson bibliothèques, pour la liaison de Chaîne JSON dans POJO (Plain Old Java Object) des cas. POJO est simplement une classe avec seulement champs privés et publics getter/setter. Jackson va traverser les méthodes (à l'aide de réflexion), et des cartes de l'objet JSON dans le POJO exemple que les noms de champ de la classe correspond aux noms des champs de l'objet JSON.
Dans votre objet JSON, qui est en fait un composite objet, l'objet principal consiste en deux sous-objets. Donc, nos classes POJO doivent avoir la même hiérarchie. Je vais appeler l'ensemble de l'Objet JSON comme Page objet. Page objet se composent d'un PageInfo objet, et un Post tableau d'objets.
Nous devons donc créer trois classes POJO;
Le seul paquet que j'ai utilisé est Jackson ObjectMapper, ce que nous faisons est de la liaison de données;
Les dépendances nécessaires, les fichiers jar sont énumérés ci-dessous;
Voici le code requis;
B - Principal de Classe POJO : Page
C - Enfant de Classe POJO : PageInfo
D - Enfant de Classe POJO : Post
E - Exemple de Fichier JSON : sampleJSONFile.json
J'ai juste copié le JSON de l'échantillon dans ce fichier et de le mettre sous le dossier de projet.
F - Code De Démonstration
G - Démo De Sortie
OriginalL'auteur Levent Divilioglu
Presque toutes les réponses nécessite une désérialisation du JSON en un objet Java avant d'accéder à la valeur de la propriété de l'intérêt. Une autre alternative, qui est de ne pas aller dans cette voie est d'utiliser JsonPATH qui est comme XPath pour JSON et permet la traversée des objets JSON.
C'est un cahier des charges et les bonnes gens à la JayWay ont créé une implémentation de Java pour la spécification que vous pouvez trouver ici: https://github.com/jayway/JsonPath
Donc en gros pour l'utiliser, ajoutez à votre projet, par exemple:
et à utiliser:
etc...
Vérifier la JsonPath spécification de la page pour plus d'informations sur les autres façons d'transverse JSON.
OriginalL'auteur dade
Vous pouvez utiliser Google Gson.
L'utilisation de cette bibliothèque vous avez seulement besoin de créer un modèle avec la même structure JSON. Ensuite, le modèle est automatiquement remplie. Vous appelez de vos variables comme votre JSON touches, ou utilisez @SerializedName si vous souhaitez utiliser des noms différents.
Pour votre exemple:
JSON:
Modèle:
Maintenant, vous pouvez analyser avec Gson bibliothèque:
Vous pouvez générer le modèle de JSON automatiquement à l'aide d'outils en ligne tels cette.
OriginalL'auteur lubilis
Utilisation minimes-json qui est très rapide et facile à utiliser.
Vous pouvez l'analyser à partir de la Chaîne obj et de Flux.
Des données de l'échantillon:
Analyse:
La création de JSON:
Maven:
Pour Pojo utilisation gson. Cette bibliothèque ne prend pas en charge.
OriginalL'auteur Sakib Sami
Je crois que la meilleure pratique devrait être de passer par le fonctionnaire Java API JSON qui sont encore en cours.
Pourquoi font-ils ré-utiliser JSONP pour signifier quelque chose de différent de JSON avec un Rembourrage?...
Que voulez-vous dire?
"Java API JSON Traitement (JSON-P)" est le titre du document que vous liez. Et il me confond, parce que je savais JSONP, signifie quelque chose d'autre.
oh que c'est déroutant. C'est ce qu'ils ont choisi pour la spécification. Cependant, comme je l'ai dit, je voudrais aller directement à Jackson.
OriginalL'auteur Giovanni Botta
L'exemple ci-dessous montre comment lire le texte en question, représenté comme le "jsonText" à la variable. Cette solution utilise le Java EE7 javax.json API (qui est mentionné dans les autres réponses). La raison pour laquelle je l'ai ajouté comme une réponse distincte est que le code suivant montre comment fait accéder à certaines des valeurs présentées dans la question. Un la mise en œuvre de la javax.API json serait nécessaire pour faire de ce code à exécuter. Le package complet pour chacune des classes requis ont été inclus comme je ne voulais pas de déclarer "importer" des déclarations.
Maintenant, avant que quelqu'un va et downvotes cette réponse, car elle n'utilise pas GSON, org.json, Jackson, ou l'une de l'autre de la 3e partie des infrastructures disponibles, c'est un exemple de "code" par la question pour analyser le texte fourni. Je suis bien conscient que l'adhésion à la norme JSR 353 était pas envisagée pour le JDK 9 et en tant que tel le JSR 353 spec doivent être traités de la même façon que tout autre 3ème partie JSON de la manipulation de la mise en œuvre.
OriginalL'auteur justin.hughey
Ce soufflé mon esprit avec la façon dont il était facile. Vous pouvez passer un
String
la tenue de votre JSON pour le constructeur d'un JSONObject dans le défaut org.json paquet.Fait. Gouttes microphone.
Cela fonctionne avec
JSONObjects
. Après, vous pouvez simplement regarder à travers votre hiérarchie deObjects
à l'aide de laget()
méthodes sur vos objets.JSONArray
type ne fait pas partie de la J2SE de l'API du JDK et vous ne dites pas qui, de l'API ou de la tierce partie de la bibliothèque fournit ce type.Non pas que je vous recommande de l'utiliser, mais je pense que cela fait référence à la "org.json" package à partir de json.org/java. Il sert à être utilisé avant les bonnes bibliothèques Java est disponible, mais c'était il y a des années (2008 ou avant)
Ou ne brainmurphy1 moyenne JSONArray dans Android?
OriginalL'auteur brainmurphy1
Puisque personne n'a mentionné encore, voici un début de solution à l'aide de Nashorn (runtime JavaScript partie de Java 8, mais obsolète en Java 11).
Solution
Comparaison des performances
J'ai écrit contenu JSON contenant les trois tableaux de respectivement 20, de 20 et de 100 éléments. Je veux seulement obtenir le 100 éléments à partir de la troisième tableau. J'ai utiliser la fonction JavaScript suivante pour analyser et d'obtenir mon entrées.
De l'exécution de l'appel d'un million de fois à l'aide de Nashorn prend 7.5~7,8 secondes
org.json prend 20~21 secondes
Jackson prend 6.5~7 secondes
Dans ce cas Jackson exécute mieux que Nashorn, qui effectue beaucoup mieux que org.json.
Nashorn API est plus difficile à utiliser que org.json ou Jackson. En fonction de vos besoins Jackson et le Nashorn, les deux peuvent être des solutions viables.
"
"? Pas de pouces? Est-il de secondes? Minutes?cela signifie secondes. Puisqu'il ne semble pas clair, je vais le changer. Merci pour la revue.
Malheureusement, Nashorn est déconseillée en Java 11. JEP 335.
OriginalL'auteur otonglet
Il y a beaucoup de JSON bibliothèques disponibles dans Java.
Les plus notoires sont: Jackson, GSON, Genson, FastJson et org.json.
Il y a généralement trois choses que l'on devrait regarder pour le choix d'une bibliothèque:
Spécifiquement pour JSON bibliothèques (et toute la sérialisation/désérialisation libs), la liaison de données est aussi, généralement, de l'intérêt qu'il supprime la nécessité de l'écriture de la chaudière-plaque de code à emballer/déballer les données.
Pour 1, voir ce test: https://github.com/fabienrenaud/java-json-benchmark je l'ai fait à l'aide de JMH qui compare (jackson, gson, genson, fastjson, org.json, jsonp) de la performance de sérialiseurs et deserializers à l'aide de flux et databind Api.
Pour 2, vous pouvez trouver de nombreux exemples sur Internet. L'indice de référence ci-dessus peut également être utilisé comme une source d'exemples...
Rapide à emporter de l'indice de référence: Jackson effectue 5 à 6 fois mieux que org.json et plus de deux fois mieux que GSON.
Pour votre exemple, le code suivant décode votre json avec jackson:
Laissez-moi savoir si vous avez des questions.
OriginalL'auteur fabien
Si vous avez une classe Java(disons Message) représentant la chaîne JSON(jsonString), vous pouvez utiliser Jackson librairie JSON avec:
et d'objet de message, vous pouvez récupérer l'un de ses attributs.
OriginalL'auteur Shailendra Singh
En plus d'autres réponses, je recommande cet en ligne open-source, service de jsonschema2pojo.org rapide pour générer des classes Java à partir de json ou json schema pour GSON, Jackson 1.x ou Jackson 2.x. Par exemple, si vous avez:
La jsonschema2pojo.org pour GSON généré:
OriginalL'auteur Viacheslav Vedenin
Il y a beaucoup de bibliothèques open source présente à analyser le contenu JSON à un objet ou tout simplement lire JSON valeurs. Votre exigence est juste pour lire des valeurs et de l'analyser pour objet personnalisé. Donc, org.librairie json est assez dans votre cas.
Utiliser org.librairie json pour analyser et créer des JsonObject:
Maintenant, utilisez cet objet pour obtenir vos valeurs:
Vous pouvez voir un exemple complet ici:
Comment parser du JSON en Java
C'est dur de donner une réponse, où vous pouvez expliquer tous les scénarios. Comme dans ce cas, comment lire le tableau json ou plusieurs objets json. Même Si je le fais, la réponse serait très long et la personne peut se tromper. Donc, je donne un lien où une bonne explication est donnée, avec un bon exemple. Il peut alors choisir de visiter, ou peut utiliser que mon explication.
Il me semble que le lien que vous avez fourni uniquement explique comment lire JSON. Où puis-je trouver des infos sur comment JSON?
Désolé, mais je ne comprends pas votre question :- "comment JSON"
OriginalL'auteur lalitbhagtani
Gson est facile à apprendre et à mettre en œuvre, ce que nous avons besoin de savoir sont deux méthodes suivantes
la méthode toJson() – Convertir en objet Java au format JSON
fromJson() – Convertir en JSON en objet Java
`
`
OriginalL'auteur venkat
Merci de faire quelque chose comme ceci:
Je pense qu'il est à l'aide de org.json.simple
OriginalL'auteur Sreekanth
Vous pouvez utiliser le Gson Bibliothèque pour analyser la chaîne JSON.
Vous pouvez également faire une boucle par les "posts" tableau de la manière suivante:
OriginalL'auteur LittleBigUllah
Lire le blog suivant, JSON en Java.
Ce post est un peu vieux, mais je veux répondre à votre question.
Étape 1: Créer une classe POJO de vos données.
Étape 2: Maintenant créer un objet en utilisant JSON.
Pour de plus amples informations vous pouvez vous reporter à la lien.
OriginalL'auteur sumit kumar
Il serait bon de mentionner ce est pour 'org.json " lib. Cependant, je ne pense pas que c'est une bonne manière de la faire, d'être très bavard, et " org.json' lib étant elle-même obsolète (lenteur, la lourdeur de l'API). Il y a de meilleurs choix: GSON, Jackson, Boon, Genson à utiliser.
OriginalL'auteur LReddy
Haut réponses sur cette page, utiliser trop d'exemples simples comme objet avec une propriété (par exemple, {nom: value}). Je pense que toujours simple, mais la vie réelle exemple peut aider quelqu'un.
Donc, c'est le JSON retourné par l'API Google Translate:
Je veux récupérer la valeur de "translatedText" attribut par exemple "Arbeit" à l'aide de Google Gson.
Deux approches possibles:
Récupérer un attribut nécessaire
Créer objet Java à partir de JSON
...
OriginalL'auteur yurin
Vous devez d'abord sélectionner un mise en œuvre de la bibliothèque de le faire.
La Java API JSON Traitement (JSR 353) portable fournit des Api pour analyser, produire, transformer, et de la requête JSON à l'aide du modèle objet et les Api en continu.
La l'implémentation de référence de est ici: https://jsonp.java.net/
Ici vous pouvez trouver une liste des implémentations de la JSR 353:
Quelles sont les API qui n'en œuvre de la JSR-353 (JSON)
Et pour vous aider à décider... j'ai trouvé cet article:
http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/
Si vous allez pour Jackson, voici un bon article sur la conversion entre JSON vers/à partir de Java à l'aide de Jackson: https://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/
Espère que cela aide!
OriginalL'auteur Jose Manuel Gomez Alvarez
Vous pouvez utiliser Jayway JsonPath. Ci-dessous est un lien GitHub avec le code source, les pom détails et une bonne documentation.
https://github.com/jayway/JsonPath
Veuillez suivre les étapes ci-dessous.
Étape 1: Ajouter la jayway JSON dépendance de chemin dans votre chemin de classe à l'aide de Maven ou télécharger le fichier JAR et l'ajouter manuellement.
Étape 2: Veuillez enregistrer votre entrée JSON sous la forme d'un fichier pour cet exemple. Dans mon cas, j'ai sauvé votre JSON comme sampleJson.txt. Remarque vous avez oublié une virgule entre pageInfo et des postes.
Étape 3: Lire le contenu JSON à partir du fichier ci-dessus à l'aide de bufferedReader et l'enregistrer en tant que Chaîne de caractères.
Étape 4: analyse de votre chaîne JSON à l'aide de jayway parser JSON.
Étape 5: Lire les détails ci-dessous.
La sortie sera:
OriginalL'auteur Ravi Durairaj
J'ai JSON comme ceci:
Classe Java
Code pour la conversion de ce JSON à une classe Java.
Maven
OriginalL'auteur Parth Solanki
jsoniter
(jsoniterator) est un phénomène relativement nouveau et simple librairie json, conçu pour être simple et rapide. Tout ce que vous devez faire pour désérialiser les données json estoù
jsonData
est une chaîne de données json.Découvrez la site officiel
pour plus d'informations.
OriginalL'auteur Pikachu the Watermelon Wizard
Nous pouvons utiliser la JSONObject classe pour convertir une chaîne JSON à un objet JSON,
et pour itérer sur l'objet JSON. Utilisez le code suivant.
Ce n'est pas seulement android: docs.oracle.com/javaee/7/api/javax/json/JsonObject.html
c'est juste Android.
OriginalL'auteur smith
Vous pouvez utiliser DSM flux de l'analyse de la bibliothèque pour l'analyse complexe json et XML document. DSM analyser les données une seule fois et de ne pas charger toutes les données en mémoire.
Disons que nous avons Page classe désérialiser des donné données json.
Classe Page
Créer un yaml fichier de Mappage.
Utiliser DSM pour extraire des champs.
page variable sérialisé en json:
DSM est très bon pour le complexe json et xml.
OriginalL'auteur mfe
On peut utiliser Apache @Modèle d'annotation pour créer Java classes du modèle représentant la structure de JSON fichiers et de les utiliser pour accéder à différents éléments dans le JSON arbre. Contrairement à d'autres solutions de ce un fonctionne complètement sans réflexion et est donc adapté pour les environnements où la réflexion est impossible ou est livré avec une surcharge importante.
Il y a un exemple de projet Maven montrant l'utilisation. Tout d'abord, il définit la structure:
et ensuite, il utilise le générés RepositoryInfo et Propriétaire des classes pour analyser la condition de flux d'entrée et de choisir certaines informations tout en faisant que:
C'est elle! En plus de ce qui est ici un vivre gist montrant un exemple similaire avec asynchrone de la communication réseau.
OriginalL'auteur Jaroslav Tulach
Vous pouvez utiliser
JsonNode
pour une arborescence structurée de la représentation de votre chaîne JSON. C'est une partie de la roche solide jackson de la bibliothèque qui est omniprésente.OriginalL'auteur slashron