预计BEGIN_ARRAY但在第1行第2列是BEGIN_OBJECT

我收到了以下错误。

由于以下原因无法解析JSON:com.google.gson.JsonSyntaxException:java.lang.IllegalStateException:预期BEGIN_ARRAY但在第1行第2列是BEGIN_OBJECT

服务器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 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); } 

发表课程

 public class Post { public String timeZoneId; public Post() { } } 

我该怎么解决这个问题?

您在注释中声明返回的JSON是这样的:

 { "dstOffset" : 3600, "rawOffset" : 36000, "status" : "OK", "timeZoneId" : "Australia/Hobart", "timeZoneName" : "Australian Eastern Daylight Time" } 

你告诉Gson你有一个Post对象数组:

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

你没有。 JSON代表一个Post对象,Gson告诉你。

将您的代码更改为:

 Post post = gson.fromJson(reader, Post.class); 

你得到的回应是对象forms,即

 { "dstOffset" : 3600, "rawOffset" : 36000, "status" : "OK", "timeZoneId" : "Australia/Hobart", "timeZoneName" : "Australian Eastern Daylight Time" } 

替换下面的代码行:

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

 Post post = gson.fromJson(reader, Post.class);