web-dev-qa-db-fra.com

Analyse de fichier JSON Java

Je souhaite analyser un fichier JSON en Java et obtenir les valeurs suivantes à partir du fichier mentionné ci-dessous: 

{
  "status": "OK",
  "Origin_addresses": [ "Vancouver, BC, Canada", "Seattle, État de Washington, États-Unis" ],
  "destination_addresses": [ "San Francisco, Californie, États-Unis", "Victoria, BC, Canada" ],
  "rows": [ {
    "elements": [ {
      "status": "OK",
      "duration": {
        "value": 340110,
        "text": "3 jours 22 heures"
      },
      "distance": {
        "value": 1734542,
        "text": "1 735 km"
      }
    }, {
      "status": "OK",
      "duration": {
        "value": 24487,
        "text": "6 heures 48 minutes"
      },
      "distance": {
        "value": 129324,
        "text": "129 km"
      }
    } ]
  }, {
    "elements": [ {
      "status": "OK",
      "duration": {
        "value": 288834,
        "text": "3 jours 8 heures"
      },
      "distance": {
        "value": 1489604,
        "text": "1 490 km"
      }
    }, {
      "status": "OK",
      "duration": {
        "value": 14388,
        "text": "4 heures 0 minutes"
      },
      "distance": {
        "value": 135822,
        "text": "136 km"
      }
    } ]
  } ]
}

De chaque élément, je veux obtenir le champ de valeur de la distance et de la durée. Comment puis-je faire cela?

13

Utilisation de l'implémentation de référence json.org ( page d'accueil org.json , Téléchargez ici ). Le code est un peu brouillon, mais je pense qu’il fait ce que vous demandez. Vous pouvez prendre beaucoup de raccourcis en ne créant pas tous ces objets mais en y accédant directement. La raison pour laquelle je le fais de cette façon est une tentative de le rendre plus facile à suivre ce qui se passe.

package com.mypackage;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

public class Main {
    public static void main(String[] args) {
        String jsonStr = "{\"status\": \"OK\",\"Origin_addresses\": [ \"Vancouver, BC, Canada\", \"Seattle, État de Washington, États-Unis\" ],\"destination_addresses\": [ \"San Francisco, Californie, États-Unis\", \"Victoria, BC, Canada\" ],\"rows\": [ {\"elements\": [ {\"status\": \"OK\",\"duration\": {\"value\": 340110,\"text\": \"3 jours 22 heures\"},\"distance\": {\"value\": 1734542,\"text\": \"1 735 km\"}}, {\"status\": \"OK\",\"duration\": {\"value\": 24487,\"text\": \"6 heures 48 minutes\"},\"distance\": {\"value\": 129324,\"text\": \"129 km\"}} ]}, {\"elements\": [ {\"status\": \"OK\",\"duration\": {\"value\": 288834,\"text\": \"3 jours 8 heures\"},\"distance\": {\"value\": 1489604,\"text\": \"1 490 km\"}}, {\"status\": \"OK\",\"duration\": {\"value\": 14388,\"text\": \"4 heures 0 minutes\"},\"distance\": {\"value\": 135822,\"text\": \"136 km\"}} ]} ]}";

        try {
            JSONObject rootObject = new JSONObject(jsonStr); // Parse the JSON to a JSONObject
            JSONArray rows = rootObject.getJSONArray("rows"); // Get all JSONArray rows

            for(int i=0; i < rows.length(); i++) { // Loop over each each row
                JSONObject row = rows.getJSONObject(i); // Get row object
                JSONArray elements = row.getJSONArray("elements"); // Get all elements for each row as an array

                for(int j=0; j < elements.length(); j++) { // Iterate each element in the elements array
                    JSONObject element =  elements.getJSONObject(j); // Get the element object
                    JSONObject duration = element.getJSONObject("duration"); // Get duration sub object
                    JSONObject distance = element.getJSONObject("distance"); // Get distance sub object

                    System.out.println("Duration: " + duration.getInt("value")); // Print int value
                    System.out.println("Distance: " + distance.getInt("value")); // Print int value
                }
            }
        } catch (JSONException e) {
            // JSON Parsing error
            e.printStackTrace();
        }
    }
}
10
MrKiane
  1. Créer une structure de classe qui reflète le JSON
  2. Utilisez une bibliothèque comme Jackson ou GSON pour désérialiser le JSON en instances de vos classes.

Si vous souhaitez une approche plus dynamique, les cadres ci-dessus peuvent également être sérialisés en cartes.

6
Bozho

Utilisez une bibliothèque pour travailler avec JSON. Par exemple google-gson .

1
shift66

comme dit Bozho, créez une structure de classe reflétant JSON, puis utilisez la bibliothèque Jacson comme suit:

refer Analyse du fichier JSON Java

ObjectMapper mapper = new ObjectMapper();
Projects projs =
mapper.readValue(new File("projects.json"),Projects.class);
ArrayList<Project> projects = projs.get("projects");
for (Project p : projects) {
ArrayList<String> description = p.getDescription();
for (String s : description) {
System.out.println(s);
1
Hemant Metalia

Vous pouvez utiliser une bibliothèque telle que JSON-Java

import org.json.JSONObject;

String jsonString = ...
JSONObject object = new JSONObject(jsonString);
String status = object.getString("status");
0
onof

Vous pouvez utiliser :

org.bson.Document d = org.bson.Document.parse("{ foo: \"bar\" }");
0
lmo