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

 StormyXin 发布于 2023-02-05 11:38

我低于错误.

由于以下原因无法解析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×tamp=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() {

    }
}

我该怎么解决这个问题?

2 个回答
  • 你得到的回应是对象形式,即

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

    2023-02-05 11:41 回答
  • 您在注释中声明返回的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));
    

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

    将您的代码更改为:

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

    2023-02-05 11:43 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有