解析谷歌地图矩阵数据

时间:2017-11-16 00:44:08

标签: java json api parsing

我一直试图在Java中使用simple-Json来解析这些数据,我需要一个特定的数据集 - >" duration" - " text"和相应的值。

我已尝试在Stack Overflow上使用https://www.journaldev.com/12668/json-simple-example和许多其他示例,但仍未设法完成此问题。

有没有人有解决方案?

   "destination_addresses" : [ "Wareham, UK" ],
   "origin_addresses" : [ "Longtown, Carlisle CA6, UK" ],
   "rows" : [
      {
         "elements" : [
            {
               "distance" : {
                  "text" : "378 mi",
                  "value" : 607958
               },
               "duration" : {
                  "text" : "6 hours 19 mins",
                  "value" : 22730
               },
               "status" : "OK"
            }
         ]
      }
   ],
   "status" : "OK"

1 个答案:

答案 0 :(得分:1)

您可以使用GSON进行JSON序列化/反序列化。您的解决方案可能是这样的:

Java 7 +

public List<String> parse(final Gson gson, final String jsonText) {
    final JsonObject json = gson.fromJson(jsonText, JsonObject.class);
    final JsonArray rowsJson = json.getAsJsonArray("rows");

    final List<String> durations = new ArrayList<>(rowsJson.size());

    for (JsonElement row : rowsJson) {
        final JsonArray elements = row
                .getAsJsonObject()
                .getAsJsonArray("elements");

        for (JsonElement element : elements) {
            final JsonObject duration = element
                    .getAsJsonObject()
                    .getAsJsonObject("duration");

            durations.add(duration.getAsJsonPrimitive("text").getAsString());
        }
    }

    return durations;
}

Java 8 +

public List<String> parse(final Gson gson, final String jsonText) {
    final JsonObject json = gson.fromJson(jsonText, JsonObject.class);

    return StreamSupport
            .stream(json.getAsJsonArray("rows").spliterator(), false)
            .map(row -> row.getAsJsonObject().getAsJsonArray("elements"))
            .flatMap(elements -> StreamSupport.stream(elements.spliterator(), false))
            .map(element -> element.getAsJsonObject().getAsJsonObject("duration"))
            .map(duration -> duration.getAsJsonPrimitive("text").getAsString())
            .collect(Collectors.toList());
}

示例:

public static void main(final String... args) {
    final Gson gson = new Gson();
    System.out.println(parse(gson, yourJSON)); // Output -> [6 hours 19 mins]
}

或者您可以使用json-simple,如下所示:

Java 7 +

public List<String> parse(final JSONParser parser, final String jsonText)
        throws ParseException {
    final JSONObject json = (JSONObject) parser.parse(jsonText);
    final JSONArray rows = (JSONArray) json.get("rows");

    final List<String> durations = new ArrayList<>();

    for (final Object row : rows) {
        final JSONArray elements = ((JSONArray) ((JSONObject) row).get("elements"));
        for (Object element : elements) {
            final JSONObject duration = (JSONObject) ((JSONObject) element).get("duration");
            durations.add((String) duration.get("text"));
        }
    }

    return durations;
}

示例:

public static void main(final String... args) throws ParseException {
    System.out.println(parse(new JSONParser(), yourJson)); // Output -> [6 hours 19 mins]
}