Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用GSON解析JSON格式?_Java_Json_Gson_Httpurlconnection - Fatal编程技术网

Java 使用GSON解析JSON格式?

Java 使用GSON解析JSON格式?,java,json,gson,httpurlconnection,Java,Json,Gson,Httpurlconnection,通过HTTPURLCONNECTION,我能够获得JSON响应,并且使用Writer,我也能够将其保存到output.JSON文件中。但我无法读取output.json的内容,也无法使用GSON直接从url读取内容。使用gson时,我面临的问题很少 public class ConnectToUrlUsingBasicAuthentication { public static void main(String[] args) { try {

通过HTTPURLCONNECTION,我能够获得JSON响应,并且使用Writer,我也能够将其保存到output.JSON文件中。但我无法读取output.json的内容,也无法使用GSON直接从url读取内容。使用gson时,我面临的问题很少

public class ConnectToUrlUsingBasicAuthentication {

    public static void main(String[] args) {

        try {
            String webPage = "http://somesite.com/json/server.json";
            //HTTPURLCONNECTION
            URL url = new URL(webPage);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("GET");
            conn.setRequestProperty("Accept", "application/json");
            StringBuilder sb = new StringBuilder();
            InputStream is = conn.getInputStream();
            InputStreamReader isr = new InputStreamReader(is,Charset.defaultCharset());
            BufferedReader bufferedReader = new BufferedReader(isr);
            String line;
            while((line = bufferedReader.readLine()) != null) {
                System.out.println("*** BEGIN ***");
                try(Writer writer = new OutputStreamWriter(new FileOutputStream("Output.json") , "UTF-8")){
                    Gson gson = new GsonBuilder().create();
                    gson.toJson(line, writer);
                    System.out.println("Written successfully");
                }
                System.out.println(line);
                System.out.println("*** END ***");
                try(Reader reader = new InputStreamReader(is, "UTF-8")){
                    Gson gson = new GsonBuilder().create();
                    JsonData p = gson.fromJson(reader, JsonData.class);
                    System.out.println(p);
                }
            }

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}
在gson.fromjson调用期间传递的另一个类是Jsondata

为变量p打印的值为空


有人能帮我用Gson打印变量p中的Json响应吗。

请等到您阅读了整个响应正文之后,再尝试用Gson转换它

try (Writer writer = new OutputStreamWriter(
        new FileOutputStream("Output.json") , "UTF-8")) {
    Gson gson = new GsonBuilder().create();
    while((line = bufferedReader.readLine()) != null) {
         gson.toJson(line, writer);
    }
}
// Now read it.
try (Reader reader = new InputStreamReader(is, "UTF-8")){
    Gson gson = new GsonBuilder().create();
    JsonData p = gson.fromJson(reader, JsonData.class);
    System.out.println(p);
}

当您将InputStream写入文件时,您将使用它。也许这就是问题所在。到底是什么错误?你有stacktrace吗?我没有收到任何错误。但是我尝试了使用null而不是JSON内容打印的值。但我仍然面临着获取JSON响应的问题。我得到的是空值
line = {
    "body":
        {"items":[
            {"name":"server","state":"RUNNING","health":"HEALTH_OK"},
            {"name":"server1","state":"RUNNING","health":"HEALTH_OK"},
            {"name":"server2","state":"RUNNING","health":"HEALTH_OK"}
        ]},

    "messages":[]}
try (Writer writer = new OutputStreamWriter(
        new FileOutputStream("Output.json") , "UTF-8")) {
    Gson gson = new GsonBuilder().create();
    while((line = bufferedReader.readLine()) != null) {
         gson.toJson(line, writer);
    }
}
// Now read it.
try (Reader reader = new InputStreamReader(is, "UTF-8")){
    Gson gson = new GsonBuilder().create();
    JsonData p = gson.fromJson(reader, JsonData.class);
    System.out.println(p);
}