Se esperaba BEGIN_ARRAY pero era BEGIN_OBJECT en la línea 1 columna 2

Estoy por debajo del error.

Error al analizar JSON debido a: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: se esperaba BEGIN_ARRAY pero era BEGIN_OBJECT en la línea 1 columna 2

URL del servidor

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

Realice la solicitud

  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); } 

Post clase

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

¿Cómo podría resolver esto?

Usted declara en los comentarios que el JSON devuelto es este:

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

Le está diciendo a Gson que tiene una matriz de objetos Post :

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

Tu no JSON representa exactamente un objeto Post , y Gson te lo está diciendo.

Cambie su código para ser:

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

La respuesta que está obteniendo está en forma de objeto, es decir,

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

Reemplazar la siguiente línea de código:

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

con

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