J'ai le texte JSON suivant. 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"
}
]
}
Réponses:
La bibliothèque org.json est facile à utiliser. Exemple de code ci-dessous:
Vous pouvez trouver plus d'exemples de: Parse JSON en Java
Pot téléchargeable: http://mvnrepository.com/artifact/org.json/json
la source
org.json
plutôt que d'autres bibliothèques pour une analyse JSON simple sans même regarder. Il s'agit de la bibliothèque de référence créée par Douglas Crockford (le découvreur JSON).Pour les besoins de l'exemple, supposons que vous ayez une classe
Person
avec juste unname
.Google GSON ( Maven )
Mon préféré en ce qui concerne la grande sérialisation / désérialisation JSON des objets.
Mise à jour
Si vous souhaitez retirer un seul attribut, vous pouvez également le faire facilement avec la bibliothèque Google:
Org.JSON ( Maven )
Si vous n'avez pas besoin de désérialisation d'objet mais simplement pour obtenir un attribut, vous pouvez essayer org.json ( ou regarder l'exemple GSON ci-dessus! )
Jackson ( Maven )
la source
JsonNode
s, GSON a quelque chose de similaire). Cela peut être utile d'afficher des extraits, car cela est similaire à la seule façon offerte par org.json.Si l'on veut créer un objet Java à partir de JSON et vice versa, utilisez des pots tiers GSON ou JACKSON, etc.
Mais si l'on veut juste analyser une chaîne JSON et obtenir des valeurs, (OU créer une chaîne JSON à partir de zéro pour l'envoyer sur le fil), il suffit d'utiliser le pot JaveEE qui contient JsonReader, JsonArray, JsonObject etc. Vous voudrez peut-être télécharger l'implémentation de cette spec comme javax.json. Avec ces deux pots, je suis capable d'analyser le json et d'utiliser les valeurs.
Ces API suivent en fait le modèle d'analyse DOM / SAX de XML.
la source
l'analyseur quick-json est très simple, flexible, très rapide et personnalisable. Essayez-le
Fonctionnalités:
Il peut être utilisé comme ceci:
la source
Vous pouvez utiliser Google Gson .
À l'aide de cette bibliothèque, il vous suffit de créer un modèle avec la même structure JSON. Ensuite, le modèle est automatiquement rempli. Vous devez appeler vos variables en tant que clés JSON ou utiliser
@SerializedName
si vous souhaitez utiliser des noms différents.JSON
De votre exemple:
Modèle
Analyse
Vous pouvez maintenant analyser à l'aide de la bibliothèque Gson:
Importation Gradle
N'oubliez pas d'importer la bibliothèque dans le fichier Gradle de l'application
Génération automatique de modèles
Vous pouvez générer automatiquement un modèle à partir de JSON en utilisant des outils en ligne comme celui-ci .
la source
Presque toutes les réponses données nécessitent une désérialisation complète du JSON en un objet Java avant d'accéder à la valeur de la propriété d'intérêt. Une autre alternative, qui ne suit pas cette route, est d'utiliser JsonPATH qui est comme XPath pour JSON et permet de traverser des objets JSON.
Il s'agit d'une spécification et les bonnes personnes de JayWay ont créé une implémentation Java pour la spécification que vous pouvez trouver ici: https://github.com/jayway/JsonPath
Donc, fondamentalement, pour l'utiliser, ajoutez-le à votre projet, par exemple:
et utiliser:
etc...
Consultez la page de spécification JsonPath pour plus d'informations sur les autres façons de transverser JSON.
la source
A - Explication
Vous pouvez utiliser les bibliothèques Jackson pour lier la chaîne JSON aux instances POJO ( Plain Old Java Object ). POJO est simplement une classe avec uniquement des champs privés et des méthodes getter / setter publiques. Jackson va parcourir les méthodes (à l'aide de la réflexion ) et mappe l'objet JSON dans l'instance POJO lorsque les noms de champ de la classe correspondent aux noms de champ de l'objet JSON.
Dans votre objet JSON, qui est en fait un objet composite , l'objet principal se compose de deux sous-objets. Ainsi, nos classes POJO devraient avoir la même hiérarchie. J'appellerai tout l'objet JSON en tant qu'objet Page . L' objet Page se compose d'un objet PageInfo et d'un tableau d'objets Post .
Nous devons donc créer trois classes POJO différentes;
Le seul paquet que j'ai utilisé est Jackson ObjectMapper, ce que nous faisons est de lier des données;
Les dépendances requises, les fichiers jar sont listés ci-dessous;
Voici le code requis;
B - Classe POJO principale: page
C - Classe POJO enfant: PageInfo
D - Classe POJO enfant: poste
E - Exemple de fichier JSON: sampleJSONFile.json
Je viens de copier votre exemple JSON dans ce fichier et de le placer dans le dossier du projet.
F - Code de démonstration
G - Sortie de démonstration
la source
Utilisez minimal-json qui est très rapide et facile à utiliser. Vous pouvez analyser à partir de String obj et Stream.
Exemples de données:
Analyse:
Création de JSON:
Maven:
la source
Je pense que la meilleure pratique devrait être de passer par l' API Java JSON officielle qui est toujours en cours de réalisation.
la source
Puisque personne ne l'a encore mentionné, voici le début d'une solution utilisant Nashorn (partie d'exécution JavaScript de Java 8, mais déconseillée dans Java 11).
Solution
Comparaison des performances
J'ai écrit du contenu JSON contenant trois tableaux de respectivement 20, 20 et 100 éléments. Je veux seulement obtenir les 100 éléments du troisième tableau. J'utilise la fonction JavaScript suivante pour analyser et obtenir mes entrées.
Exécuter l'appel un million de fois avec Nashorn prend 7,5 à 7,8 secondes
org.json prend 20 ~ 21 secondes
Jackson prend 6,5 ~ 7 secondes
Dans ce cas, Jackson fonctionne mieux que Nashorn, qui est bien meilleur que org.json. L'API Nashorn est plus difficile à utiliser que org.json ou Jackson. Selon vos besoins, Jackson et Nashorn peuvent tous deux être des solutions viables.
la source
"
"? Pas pouces? C'est quelques secondes? Minutes?ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript"); engine.eval("var fun = function(raw) { return JSON.parse(raw); };"); Map<String, Object> json = (Map<String, Object>) ((Invocable) engine).invokeFunction("fun", jsonString);
L'exemple ci-dessous montre comment lire le texte de la question, représenté par la variable "jsonText". Cette solution utilise Java EE7 de l'API (qui est mentionné dans certaines des autres réponses). La raison pour laquelle je l'ai ajouté comme réponse distincte est que le code suivant montre comment accéder réellement à certaines des valeurs affichées dans la question. Une implémentation de l'API javax.json serait nécessaire pour exécuter ce code. Le package complet pour chacune des classes requises a été inclus car je ne voulais pas déclarer les instructions "import".
Maintenant, avant que quiconque ne note cette réponse car il n'utilise pas GSON, org.json, Jackson ou l'un des autres cadres tiers disponibles, c'est un exemple de "code requis" par la question pour analyser le texte fourni. Je suis bien conscient que l' adhésion à la norme actuelle JSR 353 n'était pas envisagée pour JDK 9 et en tant que telle, la spécification JSR 353 devrait être traitée de la même manière que toute autre implémentation de gestion JSON tierce.
la source
Cela m'a époustouflé à quel point c'était facile. Vous pouvez simplement passer une
String
conservation de votre JSON au constructeur d'un JSONObject dans le package org.json par défaut.Terminé. Goutte le microphone . Cela fonctionne
JSONObjects
aussi avec . Après cela, vous pouvez simplement parcourir votre hiérarchie d'Objects
utilisation desget()
méthodes sur vos objets.la source
JSONArray
type ne fait pas partie de l'API JD J2SE et vous ne dites pas quelle API ou bibliothèque tierce fournit ce type.Il existe de nombreuses bibliothèques JSON disponibles en Java.
Les plus connus sont: Jackson, GSON, Genson, FastJson et org.json.
Il y a généralement trois choses à considérer pour choisir une bibliothèque:
Spécifiquement pour les bibliothèques JSON (et toutes les bibliothèques de sérialisation / désérialisation), la liaison de données est également généralement intéressante car elle élimine le besoin d'écrire du code de plaque chauffante pour emballer / déballer les données.
Pour 1, voir ce benchmark: https://github.com/fabienrenaud/java-json-benchmark que j'ai fait en utilisant JMH qui compare (jackson, gson, genson, fastjson, org.json, jsonp) les performances des sérialiseurs et désérialiseurs en utilisant stream et API de liaison de données. Pour 2, vous pouvez trouver de nombreux exemples sur Internet. Le benchmark ci-dessus peut également être utilisé comme source d'exemples ...
Rapide point de repère: Jackson est 5 à 6 fois meilleur que org.json et plus de deux fois meilleur que GSON.
Pour votre exemple particulier, le code suivant décode votre json avec jackson:
Faites moi savoir si vous avez des questions.
la source
En plus d'autres réponses, je recommande ce service open source en ligne jsonschema2pojo.org pour la génération rapide de classes Java à partir de schémas json ou json pour GSON, Jackson 1.x ou Jackson 2.x. Par exemple, si vous avez:
Le jsonschema2pojo.org pour GSON a généré:
la source
Si vous avez une classe Java (disons Message) représentant la chaîne JSON (jsonString), vous pouvez utiliser la bibliothèque Jackson JSON avec:
et à partir de l'objet de message, vous pouvez récupérer n'importe lequel de ses attributs.
la source
Gson est facile à apprendre et à mettre en œuvre, ce que nous devons savoir, ce sont deux méthodes
toJson () - Convertit un objet Java au format JSON
fromJson () - Convertit JSON en objet Java
"
"
la source
Il existe de nombreuses bibliothèques open source pour analyser le contenu JSON vers un objet ou simplement pour lire les valeurs JSON. Votre exigence est simplement de lire les valeurs et de les analyser en objet personnalisé. La bibliothèque org.json suffit donc dans votre cas.
Utilisez la bibliothèque org.json pour l'analyser et créer JsonObject:
Maintenant, utilisez cet objet pour obtenir vos valeurs:
Vous pouvez voir un exemple complet ici:
Comment analyser JSON en Java
la source
Veuillez faire quelque chose comme ceci:
la source
Vous pouvez utiliser la bibliothèque Gson pour analyser la chaîne JSON.
Vous pouvez également parcourir le tableau "posts" comme suit:
la source
la source
Lisez l'article de blog suivant, JSON en Java .
Ce message est un peu ancien, mais je veux quand même vous répondre.
Étape 1: créez une classe POJO de vos données.
Étape 2: Créez maintenant un objet à l'aide de JSON.
Pour plus d'informations, vous pouvez vous référer au lien suivant .
la source
Les meilleures réponses sur cette page utilisent des exemples trop simples comme un objet avec une propriété (par exemple {nom: valeur}). Je pense que cet exemple encore simple mais réel peut aider quelqu'un.
Voici donc le JSON renvoyé par l'API Google Translate:
Je veux récupérer la valeur de l'attribut "translationsText" par exemple "Arbeit" en utilisant Gson de Google.
Deux approches possibles:
Récupérer un seul attribut nécessaire
Créer un objet Java à partir de JSON
...
la source
Vous devez d'abord sélectionner une bibliothèque d'implémentation pour ce faire.
L' API Java pour le traitement JSON (JSR 353) fournit des API portables pour analyser, générer, transformer et interroger JSON à l'aide du modèle d'objet et des API de streaming.
L' implémentation de référence est ici: https://jsonp.java.net/
Vous trouverez ici une liste des implémentations de JSR 353:
Quelles sont les API qui implémentent JSR-353 (JSON)
Et pour vous aider à décider ... J'ai aussi trouvé cet article:
http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/
Si vous optez pour Jackson, voici un bon article sur la conversion entre JSON de / vers Java en utilisant Jackson: https://www.mkyong.com/java/how-to-convert-java-object-to-from-json- jackson /
J'espère que cela aide!
la source
Vous pouvez utiliser Jayway JsonPath . Vous trouverez ci-dessous un lien GitHub avec le code source, les détails du pom et une bonne documentation.
https://github.com/jayway/JsonPath
Veuillez suivre les étapes ci-dessous.
Étape 1 : Ajoutez la dépendance de chemin JSON JSON dans votre chemin de classe à l'aide de Maven ou téléchargez le fichier JAR et ajoutez-le manuellement.
Étape 2 : veuillez enregistrer votre JSON d'entrée sous forme de fichier pour cet exemple. Dans mon cas, j'ai enregistré votre JSON sous sampleJson.txt. Notez que vous avez manqué une virgule entre pageInfo et messages.
Étape 3 : Lisez le contenu JSON du fichier ci-dessus à l'aide de bufferedReader et enregistrez-le en tant que chaîne.
Étape 4 : analyser votre chaîne JSON à l'aide de l'analyseur JAYway JSON.
Étape 5 : Lisez les détails comme ci-dessous.
La sortie sera :
la source
J'ai JSON comme ceci:
Classe Java
Code pour convertir ce JSON en classe Java.
Maven
la source
On peut utiliser l' annotation Apache @Model pour créer des classes de modèle Java représentant la structure des fichiers JSON et les utiliser pour accéder à divers éléments de l' arborescence JSON . Contrairement à d'autres solutions, celle-ci fonctionne complètement sans réflexion et convient donc aux environnements où la réflexion est impossible ou s'accompagne de frais généraux importants.
Il existe un exemple de projet Maven montrant l'utilisation. Tout d'abord, il définit la structure:
puis il utilise les classes RepositoryInfo et Owner générées pour analyser le flux d'entrée fourni et récupérer certaines informations tout en faisant cela:
C'est ça! En plus de cela, voici un aperçu en direct montrant un exemple similaire avec une communication réseau asynchrone.
la source
jsoniter
(jsoniterator) est une bibliothèque json relativement nouvelle et simple, conçue 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.Consultez le site officiel pour plus d'informations.
la source
Nous pouvons utiliser la classe JSONObject pour convertir une chaîne JSON en objet JSON et pour itérer sur l'objet JSON. Utilisez le code suivant.
la source
Vous pouvez utiliser la bibliothèque d'analyse de flux DSM pour analyser un document json et XML complexe. DSM analyse les données une seule fois et ne charge pas toutes les données en mémoire.
Disons que nous avons la classe Page pour désérialiser les données json données.
Classe de page
Créez un fichier de mappage yaml.
Utilisez DSM pour extraire les champs.
variable de page sérialisée en json:
DSM est très bon pour json et xml complexes.
la source
Vous pouvez utiliser
JsonNode
pour une représentation arborescente structurée de votre chaîne JSON. Cela fait partie de la bibliothèque jackson rock solid qui est omniprésente.la source