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?
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();
}
}
}
Si vous souhaitez une approche plus dynamique, les cadres ci-dessus peuvent également être sérialisés en cartes.
Utilisez une bibliothèque pour travailler avec JSON. Par exemple google-gson .
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);
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");
Vous pouvez utiliser :
org.bson.Document d = org.bson.Document.parse("{ foo: \"bar\" }");