programing

BEGIN_ARRAY가 필요한데 1행 2에 BEGIN_OBJECT가 있었습니다.

stoneblock 2023. 3. 15. 17:47

BEGIN_ARRAY가 필요한데 1행 2에 BEGIN_OBJECT가 있었습니다.

에러가 발생하고 있습니다.

com.google.gson으로 인해 JSON을 구문 분석하지 못했습니다.Json Syntax Exception: java.lang.InlawalStateException: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<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);
    }

포스트 클래스

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

    }
}

내가 이걸 어떻게 해결할 수 있을까?

반환된 JSON은 다음과 같이 코멘트에 기재되어 있습니다.

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

지슨에게 당신이 가지고 있는 배열이Post오브젝트:

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

넌 아냐.JSON은 정확히 1을 나타냅니다.PostGson이 알려주고 있어요.

코드를 다음과 같이 변경합니다.

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

받은 응답은 객체 형식입니다.

{ 
  "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);

언급URL : https://stackoverflow.com/questions/20991386/expected-begin-array-but-was-begin-object-at-line-1-column-2