在Java中检索Json数据

问题描述 投票:0回答:2

我想在这件事上寻求您的帮助。我以前从未与Json / Gson合作,这是我想要做的。

  1. 对于一个研究项目,我们要使用HERE API,该API提供一个String,其中包含两个地址之间的路线时间。生成包含纬度和经度两个地址的URL已经相当不错了。如果我单击链接,则打开此页面:

JSON视图:

“

RAW字符串:

{"response":{"metaInfo":{"timestamp":"2020-06-09T06:25:38Z","mapVersion":"8.30.109.150","moduleVersion":"7.2.202021-7166","interfaceVersion":"2.6.76","availableMapVersion":["8.30.109.150"]},"route":[{"waypoint":[{"linkId":"+1131186975","mappedPosition":{"latitude":51.3547214,"longitude":6.1533969},"originalPosition":{"latitude":51.3547199,"longitude":6.1534},"type":"stopOver","spot":0.1907895,"sideOfStreet":"neither","mappedRoadName":"Tegelseweg","label":"Tegelseweg - N271","shapeIndex":0,"source":"user"},{"linkId":"+1151950438","mappedPosition":{"latitude":52.3654734,"longitude":4.8532104},"originalPosition":{"latitude":52.3654734,"longitude":4.8532099},"type":"stopOver","spot":0.3333333,"sideOfStreet":"neither","mappedRoadName":"Hoofdweg","label":"Hoofdweg","shapeIndex":1367,"source":"user"}],"mode":{"type":"fastest","transportModes":["truck"],"trafficMode":"disabled","feature":[]},"leg":[{"start":{"linkId":"+1131186975","mappedPosition":{"latitude":51.3547214,"longitude":6.1533969},"originalPosition":{"latitude":51.3547199,"longitude":6.1534},"type":"stopOver","spot":0.1907895,"sideOfStreet":"neither","mappedRoadName":"Tegelseweg","label":"Tegelseweg - N271","shapeIndex":0,"source":"user"},"end":{"linkId":"+1151950438","mappedPosition":{"latitude":52.3654734,"longitude":4.8532104},"originalPosition":{"latitude":52.3654734,"longitude":4.8532099},"type":"stopOver","spot":0.3333333,"sideOfStreet":"neither","mappedRoadName":"Hoofdweg","label":"Hoofdweg","shapeIndex":1367,"source":"user"},"length":183631,"travelTime":8364,"maneuver":[{"position":{"latitude":51.3547214,"longitude":6.1533969},"instruction":"Head toward <span class=\"toward_street\">Hulsterweg</span> on <span class=\"street\">Tegelseweg</span> <span class=\"number\">(N271)</span>. <span class=\"distance-description\">Go for <span class=\"length\">123 m</span>.</span>","travelTime":16,"length":123,"id":"M1","_type":"PrivateTransportManeuverType"},{"position":{"latitude":51.3555801,"longitude":6.154511},"instruction":"Make a U-Turn onto <span class=\"next-street\">Tegelseweg</span> <span class=\"number\">(N271)</span>. <span class=\"distance-description\">Go for <span class=\"length\">274 m</span>.</span>","travelTime":126,"length":274,"id":"M2","_type":"PrivateTransportManeuverType"},{"position":{"latitude":51.3541317,"longitude":6.1523652},"instruction":"Turn <span class=\"direction\">right</span> and take ramp onto <span class=\"number\">A73</span> toward <span class=\"sign\"><span lang=\"nl\">Eindhoven</span>/<span lang=\"nl\">Nijmegen</span></span>. <span class=\"distance-description\">Go for <span class=\"length\">64.3 km</span>.</span>","travelTime":2746,"length":64315,"id":"M3","_type":"PrivateTransportManeuverType"},{"position":{"latitude":51.8447292,"longitude":5.7708693},"instruction":"Keep <span class=\"direction\">right</span> onto <span class=\"number\">A73</span>. <span class=\"distance-description\">Go for <span class=\"length\">3.8 km</span>.</span>","travelTime":166,"length":3793,"id":"M4","_type":"PrivateTransportManeuverType"},{"position":{"latitude":51.856252,"longitude":5.7191348},"instruction":"Take the exit toward <span class=\"sign\"><span lang=\"nl\">Rotterdam</span>/<span lang=\"nl\">Arnhem</span></span> onto <span class=\"number\">A50</span>. <span class=\"distance-description\">Go for <span class=\"length\">2.3 km</span>.</span>","travelTime":102,"length":2338,"id":"M5","_type":"PrivateTransportManeuverType"},{"position":{"latitude":51.8729675,"longitude":5.7295954},"instruction":"Keep <span class=\"direction\">left</span> onto <span class=\"number\">A50</span>. <span class=\"distance-description\">Go for <span class=\"length\">2.5 km</span>.</span>","travelTime":103,"length":2471,"id":"M6","_type":"PrivateTransportManeuverType"},{"position":{"latitude":51.893481,"longitude":5.7424915},"instruction":"Keep <span class=\"direction\">left</span> onto <span class=\"number\">A50</span>. <span class=\"distance-description\">Go for <span class=\"length\">1.4 km</span>.</span>","travelTime":61,"length":1440,"id":"M7","_type":"PrivateTransportManeuverType"},{"position":{"latitude":51.9014311,"longitude":5.7587779},"instruction":"Take the exit toward <span class=\"sign\"><span lang=\"nl\">Rotterdam</span>/<span lang=\"nl\">Tiel</span></span> onto <span class=\"number\">A15</span>. <span class=\"distance-description\">Go for <span class=\"length\">39.8 km</span>.</span>","travelTime":1735,"length":39789,"id":"M8","_type":"PrivateTransportManeuverType"},{"position":{"latitude":51.8583441,"longitude":5.2429676},"instruction":"Take the exit toward <span class=\"sign\"><span lang=\"nl\">Utrecht</span></span> onto <span class=\"number\">A2</span>. <span class=\"distance-description\">Go for <span class=\"length\">59.0 km</span>.</span>","travelTime":2555,"length":58990,"id":"M9","_type":"PrivateTransportManeuverType"},{"position":{"latitude":52.3197055,"longitude":4.9161673},"instruction":"Keep <span class=\"direction\">right</span> onto <span class=\"number\">E35</span> <span class=\"next-street\">(Knooppunt Amstel)</span> toward <span class=\"sign\"><span lang=\"nl\">E19</span>/<span lang=\"nl\">RING</span>/<span lang=\"nl\">Luchthaven Schiphol</span>/<span lang=\"nl\">Zaanstad</span>/<span lang=\"nl\">A10</span></span>. <span class=\"distance-description\">Go for <span class=\"length\">714 m</span>.</span>","travelTime":32,"length":714,"id":"M10","_type":"PrivateTransportManeuverType"},{"position":{"latitude":52.3259926,"longitude":4.9142146},"instruction":"Keep <span class=\"direction\">left</span> onto <span class=\"next-street\">Knooppunt Amstel</span> toward <span class=\"sign\"><span lang=\"nl\">Luchthaven Schiphol</span>/<span lang=\"nl\">A10</span>/<span lang=\"nl\">E19</span></span>. <span class=\"distance-description\">Go for <span class=\"length\">1.1 km</span>.</span>","travelTime":70,"length":1140,"id":"M11","_type":"PrivateTransportManeuverType"},{"position":{"latitude":52.3305416,"longitude":4.9042583},"instruction":"Keep <span class=\"direction\">right</span> onto <span class=\"number\">A10</span> <span class=\"next-street\">(Ring Amsterdam)</span>. <span class=\"distance-description\">Go for <span class=\"length\">6.3 km</span>.</span>","travelTime":321,"length":6343,"id":"M12","_type":"PrivateTransportManeuverType"},{"position":{"latitude":52.3544562,"longitude":4.8427069},"instruction":"Take exit <span class=\"exit\">6</span> toward <span class=\"sign\"><span lang=\"nl\">Osdorp</span>/<span lang=\"nl\">Overtoomse Veld</span>/<span lang=\"nl\">Oud-West</span></span>. <span class=\"distance-description\">Go for <span class=\"length\">367 m</span>.</span>","travelTime":63,"length":367,"id":"M13","_type":"PrivateTransportManeuverType"},{"position":{"latitude":52.3577499,"longitude":4.8430288},"instruction":"Turn <span class=\"direction\">right</span> onto <span class=\"next-street\">Cornelis Lelylaan</span> <span class=\"number\">(s106)</span> toward <span class=\"sign\"><span lang=\"nl\">Oud-West</span>/<span lang=\"nl\">Centrum</span></span>. <span class=\"distance-description\">Go for <span class=\"length\">555 m</span>.</span>","travelTime":77,"length":555,"id":"M14","_type":"PrivateTransportManeuverType"},{"position":{"latitude":52.3579645,"longitude":4.8511183},"instruction":"Keep <span class=\"direction\">left</span> toward <span class=\"sign\"><span lang=\"nl\">De Baarsjes</span></span>. <span class=\"distance-description\">Go for <span class=\"length\">126 m</span>.</span>","travelTime":31,"length":126,"id":"M15","_type":"PrivateTransportManeuverType"},{"position":{"latitude":52.358104,"longitude":4.8529422},"instruction":"Take the <span class=\"exit\">2nd exit</span> from Surinameplein roundabout onto <span class=\"next-street\">Surinameplein</span>. <span class=\"distance-description\">Go for <span class=\"length\">134 m</span>.</span>","travelTime":39,"length":134,"id":"M16","_type":"PrivateTransportManeuverType"},{"position":{"latitude":52.3590052,"longitude":4.8534894},"instruction":"Continue on <span class=\"next-street\">Hoofdweg</span>. <span class=\"distance-description\">Go for <span class=\"length\">719 m</span>.</span>","travelTime":121,"length":719,"id":"M17","_type":"PrivateTransportManeuverType"},{"position":{"latitude":52.3654734,"longitude":4.8532104},"instruction":"Arrive at <span class=\"street\">Hoofdweg</span>.","travelTime":0,"length":0,"id":"M18","_type":"PrivateTransportManeuverType"}]}],"summary":{"distance":183631,"trafficTime":8427,"baseTime":8364,"flags":["tollroad","tunnel","motorway","builtUpArea"],"text":"The trip takes <span class=\"length\">184 km</span> and <span class=\"time\">2:19 h</span>.","travelTime":8364,"_type":"RouteSummaryType"}}],"language":"en-us"}}

我只需要在整个Json字符串中添加黄色标记部分(流量时间:8364)。最简单的方法是什么?我当前的代码如下所示,它返回null:

 URL host = new URL(uri);
    HttpURLConnection con = (HttpURLConnection) host.openConnection();
    con.setRequestMethod("GET");


    System.out.println(
        "Response code - message: " + con.getResponseCode() + " - " + con.getResponseMessage());

    if (con.getResponseCode() == HttpURLConnection.HTTP_OK) {
        Reader reader = new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8);
        Gson gson = new GsonBuilder().create();

con.getResponseMessage打印连接正常,因此链接有效。

  1. 我用Google搜索了几种解决方案,但是我无法导入必要的库,如果我尝试导入它们以应用我在stackoverflow上找到的此解决方案,则IntelliJ将显示错误:How to get the JSON code of a web page

Json库的导入:

“”

我是导入外部库的新手,这就是为什么我不知道如何处理此问题

谢谢您的帮助! :)

java json gson here-api
2个回答
0
投票

如果您可能正在使用Gson,请继续这种方式,不需要导入任何Json库。

JsonParser parser = new JsonParser();
JsonElement json = parser.parse(your_json_string);
JsonArray route = json.getAsJsonObject().get("response").getAsJsonObject().get("route")getAsJsonArray();
int yourTrafficTime = route.get(0).getAsJsonObject().get("summary").getAsJsonObject().get("trafficTime").getAsInt();

0
投票

您可以创建模型类,然后使用GSON解析它们。这将使您轻松访问json响应中的任何字段。

  1. 模型类
class ResponseData {
    private Response response;
    // getters and setters
}

class Response {
    private List<Route> route;
    // getters and setters
}

class Route {
    private Summary summary;
    // getters and setters
}

class Summary {
    private Long trafficTime;
    // getters and setters
}
  1. 解析JSON对模型的响应
Reader reader = new InputStreamReader(con.getInputStream(), StandardCharsets.UTF_8);
Gson gson = new Gson();
ResponseData responseData = gson.fromJson(reader, ResponseData.class);
responseData.getResponse().getRoute().forEach(route -> System.out.println(route.getSummary().getTrafficTime()));

输出:

8427

© www.soinside.com 2019 - 2024. All rights reserved.