Подтвердить что ты не робот

Разбор JSON File Java

Я хочу проанализировать 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"
      }
    } ]
  } ]
}

Из каждого элемента я хочу получить поле значений как расстояния, так и продолжительности. Как это сделать?

4b9b3361

Ответ 1

Использование справочной реализации json.org(org.json homepage, Загрузить здесь). Код немного грязный, но я думаю, что он делает то, о чем вы просите. Вы можете использовать множество ярлыков, не создавая все эти объекты, но чтобы обращаться к ним напрямую. Причина, по которой я делаю это так, - попытка упростить отслеживание происходящего.

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();
        }
    }
}

Ответ 2

  • Создайте структуру класса, которая отражает JSON
  • Используйте библиотеку, такую ​​как Jackson или GSON, для десериализации json для экземпляров ваших классов.

Если вам нужен более динамичный подход, вышеуказанные рамки также могут быть сериализованы для карт.

Ответ 3

Используйте библиотеку для работы с JSON. Например google-gson.

Ответ 4

как сказал Божо, создайте структуру класса, которая reflacts JSON, а затем используйте библиотеку jacson следующим образом:

обратитесь Разбор 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);

Ответ 5

Вы можете использовать библиотеку, например JSON-java

import org.json.JSONObject;

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

Ответ 6

Вы можете использовать:

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

Ответ 7

да, вы можете использовать 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