Comment parsingr JSON en Java

J’ai le texte JSON suivant. Comment puis-je l’parsingr pour obtenir 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" } ] } 

La bibliothèque org.json est facile à utiliser. Exemple de code ci-dessous:

 import org.json.*; JSONObject obj = new JSONObject(" .... "); Ssortingng pageName = obj.getJSONObject("pageInfo").getSsortingng("pageName"); JSONArray arr = obj.getJSONArray("posts"); for (int i = 0; i < arr.length(); i++) { String post_id = arr.getJSONObject(i).getString("post_id"); ...... } 

Vous pouvez trouver d'autres exemples de: Parse JSON en Java

Pot téléchargeable: http://mvnrepository.com/artifact/org.json/json

Pour l’exemple, supposons que vous avez une classe Person avec juste un name .

 private class Person { public Ssortingng name; public Person(Ssortingng name) { this.name = name; } } 

Google GSON ( Maven )

Mon favori personnel quant à l’excellente sérialisation / désérialisation JSON des objects.

 Gson g = new Gson(); Person person = g.fromJson("{\"name\": \"John\"}", Person.class); System.out.println(person.name); //John System.out.println(g.toJson(person)); // {"name":"John"} 

Mettre à jour

Si vous souhaitez obtenir un seul atsortingbut, vous pouvez également le faire facilement avec la bibliothèque Google:

 JsonObject jsonObject = new JsonParser().parse("{\"name\": \"John\"}").getAsJsonObject(); System.out.println(jsonObject.get("name").getAsSsortingng()); //John 

Org.JSON ( Maven )

Si vous n’avez pas besoin de désérialisation d’object mais simplement pour obtenir un atsortingbut, vous pouvez essayer org.json ( ou regarder l’exemple GSON ci-dessus! )

 JSONObject obj = new JSONObject("{\"name\": \"John\"}"); System.out.println(obj.getSsortingng("name")); //John 

Jackson ( Maven )

 ObjectMapper mapper = new ObjectMapper(); Person user = mapper.readValue("{\"name\": \"John\"}", Person.class); System.out.println(user.name); //John 
  1. Si l’on veut créer un object Java à partir de JSON et vice-versa, utilisez des jars tiers GSON ou JACKSON, etc.

     //from object to JSON Gson gson = new Gson(); gson.toJson(yourObject); // from JSON to object yourObject o = gson.fromJson(JSONSsortingng,yourObject.class); 
  2. Mais si vous voulez simplement parsingr une chaîne JSON et obtenir des valeurs, (OU créer une chaîne JSON à partir de zéro pour envoyer des données), utilisez simplement le fichier JaveEE qui contient JsonReader, JsonArray, JsonObject, etc. spec comme javax.json. Avec ces deux bocaux, je peux parsingr le json et utiliser les valeurs.

    Ces API suivent en réalité le modèle d’parsing syntaxique DOM / SAX de XML.

     Response response = request.get(); // REST call JsonReader jsonReader = Json.createReader(new SsortingngReader(response.readEntity(Ssortingng.class))); JsonArray jsonArray = jsonReader.readArray(); ListIterator l = jsonArray.listIterator(); while ( l.hasNext() ) { JsonObject j = (JsonObject)l.next(); JsonObject ciAttr = j.getJsonObject("ciAtsortingbutes"); 

Quick-Json Parser est très simple, flexible, très rapide et personnalisable. L’essayer

Caractéristiques:

  • Conforme à la spécification JSON (RFC4627)
  • Analyseur JSON haute performance
  • Prend en charge l’approche d’parsing flexible / configurable
  • Validation configurable des paires clé / valeur de toute hiérarchie JSON
  • Facile à utiliser # Très faible encombrement
  • Augmente le développeur convivial et facile à tracer des exceptions
  • Prise en charge de la validation personnalisée enfichable – Les clés / valeurs peuvent être validées en configurant des valideurs personnalisés au fur et à mesure
  • Validation et non validation de la prise en charge des parsingurs
  • Prise en charge de deux types de configuration (JSON / XML) pour l’utilisation de l’parsingur de validation quick-JSON
  • Nécessite JDK 1.5
  • Pas de dépendance aux bibliothèques externes
  • Prise en charge de la génération JSON via la sérialisation des objects
  • Prise en charge de la sélection du type de collection lors du processus d’parsing

Il peut être utilisé comme ceci:

 JsonParserFactory factory=JsonParserFactory.getInstance(); JSONParser parser=factory.newJsonParser(); Map jsonMap=parser.parseJson(jsonSsortingng); 

Presque toutes les réponses fournies nécessitent une désérialisation complète du JSON dans un object Java avant d’accéder à la valeur de la propriété qui vous intéresse. Une autre alternative, qui ne va pas dans cette voie, consiste à utiliser JsonPATH qui est comme XPath pour JSON et permet de parcourir des objects JSON.

C’est une spécification et les bons amis 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:

  com.jayway.jsonpath json-path ${version}  

et utiliser:

 Ssortingng pageName = JsonPath.read(yourJsonSsortingng, "$.pageInfo.pageName"); Ssortingng pagePic = JsonPath.read(yourJsonSsortingng, "$.pageInfo.pagePic"); Ssortingng post_id = JsonPath.read(yourJsonSsortingng, "$.pagePosts[0].post_id"); 

etc…

Consultez la page de spécification JsonPath pour plus d’informations sur les autres manières de traverser JSON.

A – Explication

Vous pouvez utiliser des bibliothèques Jackson pour lier une chaîne JSON à des 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 (en utilisant la reflection ) et mappe l’object JSON dans l’instance POJO lorsque les noms de champs de la classe correspondent aux noms de champs de l’object JSON.

Dans votre object JSON, qui est en fait un object composite , l’object principal est constitué de deux sous-objects. Donc, nos classes POJO doivent avoir la même hiérarchie. Je vais appeler tout l’object JSON comme object de page . L’ object page est constitué d’un object PageInfo et d’un tableau d’object Post .

Nous devons donc créer trois classes POJO différentes.

  • Classe de page , composé de la classe PageInfo et d’un tableau d’instances postérieures
  • Classe PageInfo
  • Classe de messages

Le seul package que j’ai utilisé est Jackson ObjectMapper, ce que nous faisons est des données de liaison;

 com.fasterxml.jackson.databind.ObjectMapper 

Les dépendances requirejses, les fichiers jar sont répertoriés ci-dessous;

  • jackson-core-2.5.1.jar
  • jackson-databind-2.5.1.jar
  • jackson-annotations-2.5.0.jar

Voici le code requirejs;

B – Classe principale POJO: Page

 package com.levo.jsonex.model; public class Page { private PageInfo pageInfo; private Post[] posts; public PageInfo getPageInfo() { return pageInfo; } public void setPageInfo(PageInfo pageInfo) { this.pageInfo = pageInfo; } public Post[] getPosts() { return posts; } public void setPosts(Post[] posts) { this.posts = posts; } } 

C – Classe de l’enfant POJO: PageInfo

 package com.levo.jsonex.model; public class PageInfo { private Ssortingng pageName; private Ssortingng pagePic; public Ssortingng getPageName() { return pageName; } public void setPageName(Ssortingng pageName) { this.pageName = pageName; } public Ssortingng getPagePic() { return pagePic; } public void setPagePic(Ssortingng pagePic) { this.pagePic = pagePic; } } 

D – Child POJO Classe: Poste

 package com.levo.jsonex.model; public class Post { private Ssortingng post_id; private Ssortingng actor_id; private Ssortingng picOfPersonWhoPosted; private Ssortingng nameOfPersonWhoPosted; private Ssortingng message; private int likesCount; private Ssortingng[] comments; private int timeOfPost; public Ssortingng getPost_id() { return post_id; } public void setPost_id(Ssortingng post_id) { this.post_id = post_id; } public Ssortingng getActor_id() { return actor_id; } public void setActor_id(Ssortingng actor_id) { this.actor_id = actor_id; } public Ssortingng getPicOfPersonWhoPosted() { return picOfPersonWhoPosted; } public void setPicOfPersonWhoPosted(Ssortingng picOfPersonWhoPosted) { this.picOfPersonWhoPosted = picOfPersonWhoPosted; } public Ssortingng getNameOfPersonWhoPosted() { return nameOfPersonWhoPosted; } public void setNameOfPersonWhoPosted(Ssortingng nameOfPersonWhoPosted) { this.nameOfPersonWhoPosted = nameOfPersonWhoPosted; } public Ssortingng getMessage() { return message; } public void setMessage(Ssortingng message) { this.message = message; } public int getLikesCount() { return likesCount; } public void setLikesCount(int likesCount) { this.likesCount = likesCount; } public Ssortingng[] getComments() { return comments; } public void setComments(Ssortingng[] comments) { this.comments = comments; } public int getTimeOfPost() { return timeOfPost; } public void setTimeOfPost(int timeOfPost) { this.timeOfPost = timeOfPost; } } 

E – Exemple de fichier JSON: sampleJSONFile.json

Je viens de copier votre échantillon JSON dans ce fichier et de le placer dans le dossier du projet.

 { "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" } ] } 

F – Code de démo

 package com.levo.jsonex; import java.io.File; import java.io.IOException; import java.util.Arrays; import com.fasterxml.jackson.databind.ObjectMapper; import com.levo.jsonex.model.Page; import com.levo.jsonex.model.PageInfo; import com.levo.jsonex.model.Post; public class JSONDemo { public static void main(Ssortingng[] args) { ObjectMapper objectMapper = new ObjectMapper(); try { Page page = objectMapper.readValue(new File("sampleJSONFile.json"), Page.class); printParsedObject(page); } catch (IOException e) { e.printStackTrace(); } } private static void printParsedObject(Page page) { printPageInfo(page.getPageInfo()); System.out.println(); printPosts(page.getPosts()); } private static void printPageInfo(PageInfo pageInfo) { System.out.println("Page Info;"); System.out.println("**********"); System.out.println("\tPage Name : " + pageInfo.getPageName()); System.out.println("\tPage Pic : " + pageInfo.getPagePic()); } private static void printPosts(Post[] posts) { System.out.println("Page Posts;"); System.out.println("**********"); for(Post post : posts) { printPost(post); } } private static void printPost(Post post) { System.out.println("\tPost Id : " + post.getPost_id()); System.out.println("\tActor Id : " + post.getActor_id()); System.out.println("\tPic Of Person Who Posted : " + post.getPicOfPersonWhoPosted()); System.out.println("\tName Of Person Who Posted : " + post.getNameOfPersonWhoPosted()); System.out.println("\tMessage : " + post.getMessage()); System.out.println("\tLikes Count : " + post.getLikesCount()); System.out.println("\tComments : " + Arrays.toSsortingng(post.getComments())); System.out.println("\tTime Of Post : " + post.getTimeOfPost()); } } 

G – Sortie de démonstration

 Page Info; ****(***** Page Name : abc Page Pic : http://example.com/content.jpg Page Posts; ********** Post Id : 123456789012_123456789012 Actor Id : 1234567890 Pic Of Person Who Posted : http://example.com/photo.jpg Name Of Person Who Posted : Jane Doe Message : Sounds cool. Can't wait to see it! Likes Count : 2 Comments : [] Time Of Post : 1234567890 

Vous pouvez utiliser Google Gson .

En utilisant cette bibliothèque, il vous suffit de créer un modèle avec la même structure JSON. Ensuite, le modèle est automatiquement renseigné. Vous devez appeler vos variables en tant que clés JSON ou utiliser @SerializedName si vous souhaitez utiliser des noms différents.

Pour votre exemple:

JSON:

 { "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" } ] 

}

Modèle:

 class MyModel { private PageInfo pageInfo; private ArrayList posts = new ArrayList<>(); } class PageInfo { private String pageName; private String pagePic; } class Post { private String post_id; @SerializedName("actor_id") // <- example SerializedName private String actorId; private String picOfPersonWhoPosted; private String nameOfPersonWhoPosted; private String message; private String likesCount; private ArrayList comments; private Ssortingng timeOfPost; } 

Maintenant, vous pouvez parsingr en utilisant la bibliothèque Gson:

 MyModel model = gson.fromJson(jsonSsortingng, MyModel.class); 

Vous pouvez générer un modèle à partir de JSON automatiquement à l’aide d’outils en ligne comme celui-ci .

Utilisez minimal-json qui est très rapide et facile à utiliser. Vous pouvez parsingr à partir de Ssortingng obj et Stream.

Données d’échantillon:

 { "order": 4711, "items": [ { "name": "NE555 Timer IC", "cat-id": "645723", "quantity": 10, }, { "name": "LM358N OpAmp IC", "cat-id": "764525", "quantity": 2 } ] } 

Analyse:

 JsonObject object = Json.parse(input).asObject(); int orders = object.get("order").asInt(); JsonArray items = object.get("items").asArray(); 

Création de JSON:

 JsonObject user = Json.object().add("name", "Sakib").add("age", 23); 

Maven:

  com.eclipsesource.minimal-json minimal-json 0.9.4  

Je pense que la meilleure pratique devrait être de passer par l’ API Java JSON officielle, qui est toujours en cours d’exécution.

L’exemple ci-dessous montre comment lire le texte dans la question, représenté par la variable “jsonText”. Cette solution utilise l’API Java EE7 javax.json (mentionnée dans certaines des autres réponses). La raison pour laquelle je l’ai ajoutée en tant que réponse distincte est que le code suivant montre comment accéder à certaines des valeurs indiqué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 requirejses a été inclus car je ne voulais pas déclarer les instructions “import”.

 javax.json.JsonReader jr = javax.json.Json.createReader(new SsortingngReader(jsonText)); javax.json.JsonObject jo = jr.readObject(); //Read the page info. javax.json.JsonObject pageInfo = jo.getJsonObject("pageInfo"); System.out.println(pageInfo.getSsortingng("pageName")); //Read the posts. javax.json.JsonArray posts = jo.getJsonArray("posts"); //Read the first post. javax.json.JsonObject post = posts.getJsonObject(0); //Read the post_id field. Ssortingng postId = post.getSsortingng("post_id"); 

Maintenant, avant que quiconque n’aborde cette réponse parce qu’elle n’utilise pas GSON, org.json, Jackson ou tout autre framework tiers disponible, c’est un exemple de “code requirejs” pour la question permettant d’parsingr le texte fourni. Je suis bien conscient que l’ adhésion à la norme actuelle JSR 353 n’était pas envisagée pour le JDK 9 et que, par conséquent, la spécification JSR 353 devrait être traitée de la même manière que toute autre implémentation de gestion JSON tierce.

Comme personne ne l’a encore mentionné, voici un début de solution utilisant Nashorn (le runtime JavaScript fait partie de Java 8).

Solution

 private static final Ssortingng EXTRACTOR_SCRIPT = "var fun = function(raw) { " + "var json = JSON.parse(raw); " + "return [json.pageInfo.pageName, json.pageInfo.pagePic, json.posts[0].post_id];};"; public void run() throws ScriptException, NoSuchMethodException { ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); engine.eval(EXTRACTOR_SCRIPT); Invocable invocable = (Invocable) engine; JSObject result = (JSObject) invocable.invokeFunction("fun", JSON); result.values().forEach(e -> System.out.println(e)); } 

Comparaison de performance

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 parsingr et obtenir mes entrées.

 var fun = function(raw) {JSON.parse(raw).ensortinges}; 

Lancer l’appel un million de fois avec Nashorn prend entre 7,5 et 7,8 secondes

 (JSObject) invocable.invokeFunction("fun", json); 

org.json prend 20 ~ 21 secondes

 new JSONObject(JSON).getJSONArray("ensortinges"); 

Jackson prend 6,5 ~ 7 secondes

 mapper.readValue(JSON, Ensortinges.class).getEnsortinges(); 

Dans ce cas, Jackson est plus performant que Nashorn, qui se comporte beaucoup mieux que org.json. Nashorn API est plus difficile à utiliser que org.json ou Jackson. Selon vos besoins, Jackson et Nashorn peuvent tous deux être des solutions viables.

Cela m’a bouleversé avec sa facilité. Vous pouvez simplement transmettre une Ssortingng contenant votre JSON au constructeur d’un object JSONObject dans le package org.json par défaut.

 JSONArray rootOfPage = new JSONArray(JSONSsortingng); 

Terminé. Baisse le microphone . Cela fonctionne également avec JSONObjects . Après cela, vous pouvez simplement parcourir votre hiérarchie d’ Objects utilisant les méthodes get() sur vos objects.

Si vous avez une classe Java (disons Message) représentant la chaîne JSON (jsonSsortingng), vous pouvez utiliser la bibliothèque Jackson JSON avec:

 Message message= new ObjectMapper().readValue(jsonSsortingng, Message.class); 

et à partir de l’object du message, vous pouvez récupérer n’importe lequel de ses atsortingbuts.

En plus d’autres réponses, je recommande ce service en ligne opensource jsonschema2pojo.org pour générer rapidement des classes Java à partir de schémas json ou json pour GSON, Jackson 1.x ou Jackson 2.x. Par exemple, si vous avez:

 { "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 } ] } 

Le jsonschema2pojo.org pour GSON généré:

 @Generated("org.jsonschema2pojo") public class Container { @SerializedName("pageInfo") @Expose public PageInfo pageInfo; @SerializedName("posts") @Expose public List posts = new ArrayList(); } @Generated("org.jsonschema2pojo") public class PageInfo { @SerializedName("pageName") @Expose public Ssortingng pageName; @SerializedName("pagePic") @Expose public Ssortingng pagePic; } @Generated("org.jsonschema2pojo") public class Post { @SerializedName("post_id") @Expose public Ssortingng postId; @SerializedName("actor_id") @Expose public long actorId; @SerializedName("picOfPersonWhoPosted") @Expose public Ssortingng picOfPersonWhoPosted; @SerializedName("nameOfPersonWhoPosted") @Expose public Ssortingng nameOfPersonWhoPosted; @SerializedName("message") @Expose public Ssortingng message; @SerializedName("likesCount") @Expose public long likesCount; @SerializedName("comments") @Expose public List comments = new ArrayList(); @SerializedName("timeOfPost") @Expose public long timeOfPost; } 

Il existe de nombreuses bibliothèques JSON disponibles en Java.

Les plus notoires sont: Jackson, GSON, Genson, FastJson et org.json.

Il y a généralement trois choses à considérer pour choisir une bibliothèque:

  1. Performance
  2. Facilité d’utilisation (le code est simple à écrire et lisible) – cela va de pair avec les fonctionnalités.
  3. Pour les applications mobiles: dépendance / taille du pot

Spécifiquement pour les bibliothèques JSON (et toute librairie de sérialisation / désérialisation), la liaison de données est également intéressante car elle évite d’avoir à écrire du code de la plate-forme pour emballer / décompresser les données.

Pour 1, voir ce test: https://github.com/fabienrenaud/java-json-benchmark J’ai utilisé JMH qui compare (jackson, gson, genson, fastjson, org.json, jsonp) les performances des sérialiseurs et des désérialiseurs utilisant des stream. et API de firebase database. Pour 2, vous pouvez trouver de nombreux exemples sur Internet. La référence ci-dessus peut également être utilisée comme source d’exemples …

Rapide prise de référence: Jackson fait 5 à 6 fois mieux que org.json et plus de deux fois mieux que GSON.

Pour votre exemple particulier, le code suivant décode votre json avec jackson:

 public class MyObj { private PageInfo pageInfo; private List posts; static final class PageInfo { private Ssortingng pageName; private Ssortingng pagePic; } static final class Post { private Ssortingng post_id; @JsonProperty("actor_id"); private Ssortingng actorId; @JsonProperty("picOfPersonWhoPosted") private Ssortingng pictureOfPoster; @JsonProperty("nameOfPersonWhoPosted") private Ssortingng nameOfPoster; private Ssortingng likesCount; private List comments; private Ssortingng timeOfPost; } private static final ObjectMapper JACKSON = new ObjectMapper(); public static void main(Ssortingng[] args) throws IOException { MyObj o = JACKSON.readValue(args[0], MyObj.class); // assumes args[0] contains your json payload provided in your question. } } 

Faites moi savoir si vous avez des questions.

Gson est facile à apprendre et à mettre en œuvre, ce que nous devons savoir sont deux méthodes

  • toJson () – Convertit un object Java au format JSON

  • fromJson () – Convertit JSON en object Java

`

 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import com.google.gson.Gson; public class GsonExample { public static void main(Ssortingng[] args) { Gson gson = new Gson(); try { BufferedReader br = new BufferedReader( new FileReader("c:\\file.json")); //convert the json ssortingng back to object DataObject obj = gson.fromJson(br, DataObject.class); System.out.println(obj); } catch (IOException e) { e.printStackTrace(); } } } 

`

De nombreuses bibliothèques open source sont présentes pour parsingr le contenu JSON dans un object ou simplement lire les valeurs JSON. Votre exigence est simplement de lire les valeurs et de les parsingr sur un object personnalisé. La bibliothèque org.json est donc suffisante dans votre cas.

Utilisez la bibliothèque org.json pour l’parsingr et créer JsonObject:

 JSONObject jsonObj = new JSONObject(); 

Maintenant, utilisez cet object pour obtenir vos valeurs:

 Ssortingng id = jsonObj.getSsortingng("pageInfo"); 

Vous pouvez voir un exemple complet ici:

Comment parsingr JSON en Java

Vous pouvez utiliser la bibliothèque Gson pour parsingr la chaîne JSON.

 Gson gson = new Gson(); JsonObject jsonObject = gson.fromJson(jsonAsSsortingng, JsonObject.class); Ssortingng pageName = jsonObject.getAsJsonObject("pageInfo").get("pageName").getAsSsortingng(); Ssortingng pagePic = jsonObject.getAsJsonObject("pageInfo").get("pagePic").getAsSsortingng(); Ssortingng postId = jsonObject.getAsJsonArray("posts").get(0).getAsJsonObject().get("post_id").getAsSsortingng(); 

Vous pouvez également parcourir le tableau “posts” comme suit:

 JsonArray posts = jsonObject.getAsJsonArray("posts"); for (JsonElement post : posts) { Ssortingng postId = post.getAsJsonObject().get("post_id").getAsSsortingng(); //do something } 

S’il vous plaît faire quelque chose comme ça:

 JSONParser jsonParser = new JSONParser(); JSONObject obj = (JSONObject) jsonParser.parse(contentSsortingng); Ssortingng product = (Ssortingng) jsonObject.get("productId"); 
 { "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 code : JSONObject obj = new JSONObject(responsejsonobj); Ssortingng pageName = obj.getJSONObject("pageInfo").getSsortingng("pageName"); JSONArray arr = obj.getJSONArray("posts"); for (int i = 0; i < arr.length(); i++) { String post_id = arr.getJSONObject(i).getString("post_id"); ......etc } 

Top answers on this page use too simple examples like object with one property (eg {name: value}). I think that still simple but real life example can help someone.

So this is the JSON returned by Google Translate API:

 { "data": { "translations": [ { "translatedText": "Arbeit" } ] } } 

I want to resortingeve the value of “translatedText” atsortingbute eg “Arbeit” using Google’s Gson.

Two possible approaches:

  1. Resortingeve just one needed atsortingbute

     Ssortingng json = callToTranslateApi("work", "de"); JsonObject jsonObject = new JsonParser().parse(json).getAsJsonObject(); return jsonObject.get("data").getAsJsonObject() .get("translations").getAsJsonArray() .get(0).getAsJsonObject() .get("translatedText").getAsSsortingng(); 
  2. Create Java object from JSON

     class ApiResponse { Data data; class Data { Translation[] translations; class Translation { Ssortingng translatedText; } } } 

      Gson g = new Gson(); Ssortingng json =callToTranslateApi("work", "de"); ApiResponse response = g.fromJson(json, ApiResponse.class); return response.data.translations[0].translatedText; 

First you need to select an implementation library to do that.

The Java API for JSON Processing (JSR 353) provides portable APIs to parse, generate, transform, and query JSON using object model and streaming APIs.

The reference implementation is here: https://jsonp.java.net/

Here you can find a list of implementations of JSR 353:

What are the API that does implement JSR-353 (JSON)

And to help you decide … I found this article as well:

http://blog.takipi.com/the-ultimate-json-library-json-simple-vs-gson-vs-jackson-vs-json/

If you go for Jackson, here is a good article about conversion between JSON to/from Java using Jackson: https://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

J’espère que cela aide!

Read the following blog post, JSON in Java .

This post is a little bit old, but still I want to answer you question.

Step 1: Create a POJO class of your data.

Step 2: Now create a object using JSON.

 Employee employee = null; ObjectMapper mapper = new ObjectMapper(); try{ employee = mapper.readValue(newFile("/home/sumit/employee.json"), Employee.class); } catch (JsonGenerationException e){ e.printStackTrace(); } 

For further reference you can refer to the following link .

You can use Jayway JsonPath . Below is a GitHub link with source code, pom details and good documentation.

https://github.com/jayway/JsonPath

Please follow the below steps.

Step 1 : Add the jayway JSON path dependency in your class path using Maven or download the JAR file and manually add it.

  com.jayway.jsonpath json-path 2.2.0  

Step 2 : Please save your input JSON as a file for this example. In my case I saved your JSON as sampleJson.txt. Note you missed a comma between pageInfo and posts.

Step 3 : Read the JSON contents from the above file using bufferedReader and save it as Ssortingng.

 BufferedReader br = new BufferedReader(new FileReader("D:\\sampleJson.txt")); SsortingngBuilder sb = new SsortingngBuilder(); Ssortingng line = br.readLine(); while (line != null) { sb.append(line); sb.append(System.lineSeparator()); line = br.readLine(); } br.close(); Ssortingng jsonInput = sb.toSsortingng(); 

Step 4 : Parse your JSON ssortingng using jayway JSON parser.

 Object document = Configuration.defaultConfiguration().jsonProvider().parse(jsonInput); 

Step 5 : Read the details like below.

 Ssortingng pageName = JsonPath.read(document, "$.pageInfo.pageName"); Ssortingng pagePic = JsonPath.read(document, "$.pageInfo.pagePic"); Ssortingng post_id = JsonPath.read(document, "$.posts[0].post_id"); System.out.println("$.pageInfo.pageName " + pageName); System.out.println("$.pageInfo.pagePic " + pagePic); System.out.println("$.posts[0].post_id " + post_id); 

The output will be :

 $.pageInfo.pageName = abc $.pageInfo.pagePic = http://example.com/content.jpg $.posts[0].post_id = 123456789012_123456789012 

I have JSON like this:

 { "pageInfo": { "pageName": "abc", "pagePic": "http://example.com/content.jpg" } } 

Java class

 class PageInfo { private Ssortingng pageName; private Ssortingng pagePic; // Getters and setters } 

Code for converting this JSON to a Java class.

  PageInfo pageInfo = JsonPath.parse(jsonSsortingng).read("$.pageInfo", PageInfo.class); 

Maven

  com.jayway.jsonpath json-path 2.2.0  

One can use Apache @Model annotation to create Java model classes representing structure of JSON files and use them to access various elements in the JSON tree. Unlike other solutions this one works completely without reflection and is thus suitable for environments where reflection is impossible or comes with significant overhead.

There is a sample Maven project showing the usage. First of all it defines the structure:

 @Model(className="RepositoryInfo", properties = { @Property(name = "id", type = int.class), @Property(name = "name", type = Ssortingng.class), @Property(name = "owner", type = Owner.class), @Property(name = "private", type = boolean.class), }) final class RepositoryCntrl { @Model(className = "Owner", properties = { @Property(name = "login", type = Ssortingng.class) }) static final class OwnerCntrl { } } 

and then it uses the generated RepositoryInfo and Owner classes to parse the provided input stream and pick certain information up while doing that:

 List repositories = new ArrayList<>(); try (InputStream is = initializeStream(args)) { Models.parse(CONTEXT, RepositoryInfo.class, is, repositories); } System.err.println("there is " + repositories.size() + " repositories"); repositories.stream().filter((repo) -> repo != null).forEach((repo) -> { System.err.println("repository " + repo.getName() + " is owned by " + repo.getOwner().getLogin() ); }) 

C’est ça! In addition to that here is a live gist showing similar example together with asynchronous network communication.

You can use JsonNode for a structured tree representation of your JSON ssortingng. It’s part of the rock solid jackson library which is omnipresent.

 ObjectMapper mapper = new ObjectMapper(); JsonNode yourObj = mapper.readTree("{\"k\":\"v\"}"); 

We can use the JSONObject class to convert a JSON ssortingng to a JSON object, and to iterate over the JSON object. Use the following code.

 JSONObject jObj = new JSONObject(contents.sortingm()); Iterator keys = jObj.keys(); while( keys.hasNext() ) { Ssortingng key = (Ssortingng)keys.next(); if ( jObj.get(key) instanceof JSONObject ) { System.out.println(jObj.getSsortingng(Ssortingng key)); } } 

You need to use JsonNode and ObjectMapper class from the jackson library to fetch the nodes of your Json tree.Add the below dependency in your pom.xml to get an access to the Jackson classes.

   com.fasterxml.jackson.core jackson-databind 2.9.5  

You shall give a try on the below code, this would work :

 import com.fasterxml.jackson.core.JsonGenerationException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; Class JsonNodeExtractor{ public void convertToJson(){ Ssortingng filepath = "c:\\data.json"; ObjectMapper mapper = new ObjectMapper(); JsonNode node = mapper.readTree(filepath); // create a JsonNode for every root or subroot element in the Json Ssortingng JsonNode pageInfoRoot = node.path("pageInfo"); // Fetching elements under 'pageInfo' Ssortingng pageName = pageInfoRoot.path("pageName").asText(); Ssortingng pagePic = pageInfoRoot.path("pagePic").asText(); // Now fetching elements under posts JsonNode postsNode = node.path("posts"); Ssortingng post_id = postsNode .path("post_id").asText(); Ssortingng nameOfPersonWhoPosted = postsNode .path("nameOfPersonWhoPosted").asText(); } }