【问题标题】:Saving data from url to JSON object将数据从 url 保存到 JSON 对象
【发布时间】:2016-08-11 20:51:33
【问题描述】:

我必须创建 JSON 解析器以使用 org.json 库和仅 Java 标准库将从 url 接收的数据保存到 JSON 对象中,但我不知道如何连接到这些

 String line = "326";

    URL oracle = new URL("https://api.tfl.gov.uk/Line/"+line+"/Arrivals?app_id=&app_key=");
    BufferedReader in = new BufferedReader(
    new InputStreamReader(oracle.openStream()));

    String inputLine;
    while ((inputLine = in.readLine()) != null)
        System.out.println(inputLine);
    in.close();

这是我的连接代码

【问题讨论】:

    标签: java json parsing


    【解决方案1】:

    我的建议是使用 JSON 解析器,例如 Jackson。

    1. 创建一个类来存储您要从中存储的数据 那个 JSON。
    2. 使用 URL 连接并获取 JSON
    3. 使用 Jackson 将其转换为 Java 对象

    如果您需要更多帮助,请告诉我,我可以提供。

    【讨论】:

    • 你能指定如何抓取这个 JSON 吗?这是我第一次尝试使用 URL 和 JSON 格式和
    • 查看我关于如何进行 http 调用和解析传入字符串正文的答案
    • 还有多个其他的 stackoverflow 答案可以向您展示如何逐步拉取它。我在这里链接一些:stackoverflow.com/questions/7467568/parsing-json-from-urlstackoverflow.com/questions/4308554/…
    • 谢谢,我取得了一些进展,但现在我遇到了错误:
    • org.json.JSONException:在 org.json.JSONTokener.syntaxError(JSONTokener.java:432) 的 org.json.JSONTokener.syntaxError(JSONTokener.java:432) 处,JSONObject 文本必须以 '{' 在 1 [字符 2 第 1 行] 开头。 json.JSONObject.(JSONObject.java:184) 在 org.json.JSONObject.(JSONObject.java:310) 在 GetData.WasteOfTime.main(WasteOfTime.java:31)
    【解决方案2】:

    使用像okhttp 这样的http 客户端库来发出请求并获取字符串正文。

    然后使用Jackson之类的json解析器将接收到的字符串解析成Json对象。

    使用okhttp如下:

    OkHttpClient client = new OkHttpClient();
    
    Request request = new Request.Builder()
      .url(url)
      .build();
    
    Response resp = client.newCall(request).execute();
    String response =  resp.body().string();
    

    获得响应字符串后,您可以使用 Jackson ObjectMapper 从中创建一个 jsonNode,如下所示

    ObjectMapper mapper = new ObjectMapper();
    JsonNode tree = mapper.readTree(response);
    

    或者通过将响应解析为来获取您定义的 POJO

    YourClass mappedPOJO = mapper.readValue(response, YourClass.class);
    

    假设你传入的 json 是

    {
        "key1":"value1",
        "key2": {
            "key3":"value3"
        }
    }
    

    然后tree.get("key1")给你“value1”,

    tree.get("key1").get("key2") 给你“value3”

    【讨论】:

    • 我只能用java标准库和org.jason一个
    猜你喜欢
    • 2017-09-10
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多