解析JSON文件Java

我想在java中解析一个JSON文件,并从下面提到的文件中获取以下值:

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

从每个元素,我想得到距离和持续时间的值字段。 我该怎么做呢?

使用json.org参考实现( org.json主页 , 在此处下载 )。 代码有点乱,但我认为它符合你的要求。 您可以通过不创建所有这些对象但直接访问它们来获取大量快捷方式。 我这样做的原因是试图让它更容易跟踪发生的事情。

 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(); } } } 
  1. 创建一个反映JSON的类结构
  2. 使用像Jackson或GSON这样的库将json反序列化为类的实例。

如果你想要一个更动态的方法,上面的框架也可以序列化到地图。

使用库来使用JSON。 例如google-gson 。

正如Bozho所说,创建类结构,reflectionJSON,然后使用jacson库如下:

请参阅解析JSON文件Java

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

您可以使用类似JSON-java的库

 import org.json.JSONObject; String jsonString = ... JSONObject object = new JSONObject(jsonString); String status = object.getString("status"); 

您可以使用 :

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

是的你可以使用jacson来解析它,但有更简单的方法来做它的Jsonme lib“import org.json.me”你不必添加jar文件来使用它

  JSONObject obj = new JSONObject("{'var1':'val1','var2':200}); String var1=obj.getString("var1"); int var2=obj.getInt("var2"); 

是的,它更容易,但如果你的项目很复杂,我建议你使用jacson lib