简体   繁体   English

如何使用JsonReader从URL读取JSON对象?

[英]how to read a JSON object from a URL with JsonReader?

Without using additional JAR's or API's, strictly using javax.json.* , how can I read a JSON object from a URL? 在不使用其他JAR或API的情况下,严格使用javax.json.* ,如何从URL读取JSON对象?

The javadocs suggest that it's possible: javadocs建议有可能:

 JsonReader jsonReader = Json.createReader(new StringReader("[]"));
 JsonArray array = jsonReader.readArray();
 jsonReader.close();

but aren't specific about how to use a URL or URI . 但并未具体说明如何使用URL或URI

current code: 当前代码:

package net.bounceme.noagenda;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.StringReader;
import javax.json.JsonObject;
import static java.lang.System.out;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.json.Json;
import javax.json.JsonArray;
import javax.json.JsonReader;

public class NoAgenda {

    public static void main(String[] args) {
        new NoAgenda().fromURL();
    }

    private void fromURL() {
        try {
            String jsonString = callURL("http://www.javascriptkit.com/dhtmltutors/javascriptkit.json");
        } catch (IOException ex) {
            Logger.getLogger(NoAgenda.class.getName()).log(Level.SEVERE, null, ex);
        }
        try (JsonReader jsonReader = Json.createReader(new StringReader("[]"))) {
            JsonArray array = jsonReader.readArray();
            out.println(array.toString());
        }
    }

    public String callURL(String myURL) throws IOException {
        System.out.println("Requested URL:" + myURL);
        StringBuilder sb = new StringBuilder();
        URLConnection urlConn = null;
        InputStreamReader in = null;
        URL url = new URL(myURL);
        urlConn = url.openConnection();
        if (urlConn != null) {
            urlConn.setReadTimeout(60 * 1000);
        }
        if (urlConn != null && urlConn.getInputStream() != null) {
            in = new InputStreamReader(urlConn.getInputStream(),
                    Charset.defaultCharset());
            BufferedReader bufferedReader = new BufferedReader(in);
            if (bufferedReader != null) {
                int cp;
                while ((cp = bufferedReader.read()) != -1) {
                    sb.append((char) cp);
                }
                bufferedReader.close();
            }
        }
        in.close();
        return sb.toString();
    }

    public JsonObject buildBook() {
        JsonObject value = Json.createObjectBuilder()
                .add("firstName", "John")
                .add("lastName", "Smith")
                .add("age", 25)
                .add("address", Json.createObjectBuilder()
                        .add("streetAddress", "21 2nd Street")
                        .add("city", "New York")
                        .add("state", "NY")
                        .add("postalCode", "10021"))
                .add("phoneNumber", Json.createArrayBuilder()
                        .add(Json.createObjectBuilder()
                                .add("type", "home")
                                .add("number", "212 555-1234"))
                        .add(Json.createObjectBuilder()
                                .add("type", "fax")
                                .add("number", "646 555-4567")))
                .build();
        return value;
    }

}

trying to get the JSON object for this page: 尝试获取此页面的JSON对象:

http://www.javascriptkit.com/dhtmltutors/javascriptkit.json http://www.javascriptkit.com/dhtmltutors/javascriptkit.json

again, to re-iterate, to emphasize, just using javax packages. 再次重申一下,仅使用javax包即可。

You can do something like this, though I haven't ever worked on Json api in javax. 您可以做这样的事情,尽管我从未在javax中使用过Json api。

try(InputStream is = new URL(your_url).openStream();
JsonReader reader =  Json. createReader(new InputStreamReader(is, "UTF-8"));){
 //TODO: Let's start doing Yoga with Json
}
catch(IOException e){
e.printStackTrace();
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM