2012-01-20 14 views
12

pliku Chcę przeanalizować plik JSON w Javie i uzyskać następujące wartości z pliku wymienione poniżej:analizowaniem JSON Java

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

Z każdego elementu, chcę, aby uzyskać pole wartości zarówno odległości i czasu trwania . Jak mam to zrobic?

+1

sprawdzić to: http://stackoverflow.com/questions/2255220/how-to-parse-a-json-and-turn-its-values- do tablicy – aayoubi

Odpowiedz

10

Korzystanie realizację odniesienia json.org (org.json homepage, Download here). Kod jest trochę nieporządny, ale myślę, że robi to, o co prosisz. Możesz wykonać wiele skrótów, nie tworząc wszystkich tych obiektów, ale uzyskując do nich bezpośredni dostęp. Powodem, dla którego robię to w ten sposób, jest próba ułatwienia śledzenia tego, co się dzieje.

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(); 
     } 
    } 
} 
6
  1. Tworzenie struktury klasy, która odzwierciedla JSON
  2. korzystać z biblioteki jak Jackson czy GSON deserializacji json do wystąpień swoich klasach.

Jeśli chcesz bardziej dynamiczne podejście, powyższe ramy mogą również serializować do map.

1

jak Bozho powiedział tworzyć struktury klasowej że reflacts JSON, a następnie użyć biblioteki JACSON następująco:

odnoszą Parsing JSON File 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); 
0

Można korzystać z biblioteki jak JSON-java

import org.json.JSONObject; 

String jsonString = ... 
JSONObject object = new JSONObject(jsonString); 
String status = object.getString("status"); 
-1

Tak może użyć Jacsona do parsowania, ale jest łatwiejszy sposób na zrobienie tego jego Jsonme lib "import org.json.me" nie musisz do reklamy d plik jar z niego korzystać

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

tak jej łatwiej, ale jeśli projekt jest złożony porady i korzystanie z JACSON lib

0

Można użyć:

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