Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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 应为BEGIN_数组,但在第1行第2列为BEGIN_对象_Java_Json_Gson - Fatal编程技术网

Java 应为BEGIN_数组,但在第1行第2列为BEGIN_对象

Java 应为BEGIN_数组,但在第1行第2列为BEGIN_对象,java,json,gson,Java,Json,Gson,我在犯错误 无法分析JSON,原因是:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:应为BEGIN_数组,但为 从第1行第2列开始\u对象 服务器Url public static final String SERVER_URL = "https://maps.googleapis.com/maps/api/timezone/json?location=-37.8136,144.9631&time

我在犯错误

无法分析JSON,原因是:com.google.gson.JsonSyntaxException: java.lang.IllegalStateException:应为BEGIN_数组,但为 从第1行第2列开始\u对象

服务器Url

public static final String SERVER_URL = "https://maps.googleapis.com/maps/api/timezone/json?location=-37.8136,144.9631&timestamp=1389162695&sensor=false";
执行请求

    try {
        // Create an HTTP client
        HttpClient client = HttpClientBuilder.create().build();
        HttpPost post = new HttpPost(SERVER_URL);

        // Perform the request and check the status code
        HttpResponse response = client.execute(post);
        StatusLine statusLine = response.getStatusLine();
        if (statusLine.getStatusCode() == 200) {
            HttpEntity entity = response.getEntity();
            InputStream content = entity.getContent();

            try {
                // Read the server response and attempt to parse it as JSON
                Reader reader = new InputStreamReader(content);

                GsonBuilder gsonBuilder = new GsonBuilder();
                gsonBuilder.setDateFormat("M/d/yy hh:mm a");
                Gson gson = gsonBuilder.create();
                List<Post> postsList = Arrays.asList(gson.fromJson(reader,
                        Post[].class));

                content.close();

                for (Post p : postsList) {
                    System.out.println(p.timeZoneId);
                }

            } catch (Exception ex) {
                System.out.println("Failed to parse JSON due to: " + ex);
            }
        } else {
            System.out.println("Server responded with status code: "
                    + statusLine.getStatusCode());
        }
    } catch (Exception ex) {
        System.out
                .println("Failed to send HTTP POST request due to: " + ex);
    }

我如何解决这个问题?

您得到的响应是对象形式的,即

{ 
  "dstOffset" : 3600, 
  "rawOffset" : 36000, 
  "status" : "OK", 
  "timeZoneId" : "Australia/Hobart", 
  "timeZoneName" : "Australian Eastern Daylight Time" 
}
替换以下代码行:

List<Post> postsList = Arrays.asList(gson.fromJson(reader,Post.class))

您在注释中声明返回的JSON如下:

{ 
  "dstOffset" : 3600, 
  "rawOffset" : 36000, 
  "status" : "OK", 
  "timeZoneId" : "Australia/Hobart", 
  "timeZoneName" : "Australian Eastern Daylight Time" 
}
您告诉Gson您有一个
Post
对象数组:

List<Post> postsList = Arrays.asList(gson.fromJson(reader,
                    Post[].class));

您正在调用的资源,您确定它返回一个对象数组还是一个对象数组?它返回这个<代码>{“dstOffset”:3600,“rawOffset”:36000,“status:“OK”,“timeZoneId:“Australia/Hobart”,“timeZoneName:“Australian Eastern Daylight Time”}因为您的JSON不是数组,它告诉您这一点。是的。我也用同样的方法。您使用的是post[].class,我建议post.class如何使用此post?@rohan您需要使用JSON响应属性创建一个名为
post
的POJO类。确定。现在我明白了。谢谢你的努力:)
{ 
  "dstOffset" : 3600, 
  "rawOffset" : 36000, 
  "status" : "OK", 
  "timeZoneId" : "Australia/Hobart", 
  "timeZoneName" : "Australian Eastern Daylight Time" 
}
List<Post> postsList = Arrays.asList(gson.fromJson(reader,
                    Post[].class));
Post post = gson.fromJson(reader, Post.class);