我一直试图在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"
答案 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]
}