【问题标题】:Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 1 column 35预期为 BEGIN_ARRAY,但在第 1 行第 35 列为 BEGIN_OBJECT
【发布时间】:2015-01-12 22:52:11
【问题描述】:

我刚开始使用 gson,我正在尝试解析一个以对象开头的 JSON 字符串并且总是得到相同的错误 JSON

{
  "code": 200, 
  "data": {
    "messages": [
      {
        "emailSender": "dsfd@mail.ru", 
        "countryCode": null, 
        "emailSenderReply": null, 
        "rejectedReason": null, 
        "messageReplySenderMessageDeleted": null, 
        "lastNameReceiver": null, 
        "wpMessagesRatingReplyId": null, 
        "wpMessagesRatingRating": null, 
        "countryMemberId": 143, 
        "phoneSenderReply": null, 
        "messageReplyReceiverMessageDeleted": null, 
        "readStatus": "unread", 
        "phoneReceiverReply": null, 
        "membersSenderUid": "m8692031", 
        "wpMessagesRequestTitle": "Fazzzzzz", 
        "title": "Fazzzzzz", 
        "countryTitle": null, 
        "emailReceiver": null, 
        "firstNameReceiverReply": null, 
        "id": 1288, 
        "messageReplyId": null, 
        "membersReceiverUid": "m1000002", 
        "time": "2014-12-28 14:32:09", 
        "wpMessagesRequestCategoryId": 4, 
        "lastNameReceiverReply": null, 
        "lastNameSender": "dsad", 
        "phoneReceiver": null, 
        "status": "unanswered", 
        "messageReplyReceiver": null, 
        "messageReplyStatus": null, 
        "memberReceiverRole": "admin", 
        "isConsultant": 1, 
        "roleReplyReceiver": null, 
        "wpMesssagesRequestCategoriesSystemName": "orders", 
        "lastNameSenderReply": null, 
        "memberSenderRole": "member", 
        "wpMesssagesRequestCategoriesName": "Orders", 
        "requestMessage": 1101, 
        "wpMessagesRequestPriority": "middle", 
        "messageReplyTime": null, 
        "message": "OLOLO", 
        "wpMessagesRequestCountryId": null, 
        "sender": 4481, 
        "firstNameReceiver": null, 
        "messageReplyMessage": null, 
        "firstNameSender": "asdas", 
        "firstNameSenderReply": null, 
        "emailReceiverReply": null, 
        "roleReplySender": null, 
        "messageReplySender": null, 
        "wpMessagesRequestProductId": null, 
        "receiver": 4364, 
        "isMessageForwarded": 0, 
        "wpMessagesRequestStatus": "not-taken", 
        "phoneSender": "2(342)-4-23-42", 
        "wpMessagesRequestMessage": "OLOLO"
      }
    ]
  }
}

我一直遇到错误:

Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 3 column 12

我的日志中的错误指向这一行:

Gson gson = new GsonBuilder().create();
Main main=gson.fromJson(a, Main.class);

这是我的宝乔

static class Main{
        int code;
        boolean error;
        List<Data> data;
    }
    static class Data{
        Enteties messages;
    }
    static class Enteties{
        String msg_title;
        String msg_time;
        int msg_id;
        String msg_status;
        @Override
        public String toString(){
            return msg_title+" "+msg_time+" "+msg_id+" "+msg_status;
        }
    }

【问题讨论】:

    标签: android json gson


    【解决方案1】:

    您的 Main 类将 Data 作为列表。您的 JSON 将其作为对象。类型需要匹配。如果您希望 main 中只有 1 个数据,请不要使用列表。如果您期望 1 个或更多数据,请让生成数据的代码向下发送一个数组(即使该数组中只有 1 个对象)。

    【讨论】:

    • 我改变了,现在我得到 null 而不是值
    • 谢谢您,先生,您的回答帮助很大,空值是因为 pojo 名称配置错误
    【解决方案2】:

    你的 POJO 应该是这样的

    你的实体类:

    public class Entity {
        private int id;
    
        private String emailSender;
        private String membersSenderUid;
        private String title;
        private String time;
    
        @SerializedName("wpMessagesRequestStatus")
        private String status;
    
        // getters, setters & toString methods
    }
    

    @SerializedName 是一个注解,指示该成员应序列化为 JSON,并使用提供的名称值作为其字段名称。更多详情check here

    您的数据类:

    public class Data {
        private List<Entity> messages;
    
        // getters, setters & toString methods
    }
    

    最后是主类:

    public class Main {
        private int code;
        private boolean error;
        private Data data;
    
        // getters, setters & toString methods
    }
    

    解析代码如下:

    Gson gson = new GsonBuilder().create();
    Main main=gson.fromJson(jsonData, Main.class); // here jsonData is the string that is holding your actual json data
    System.out.println(main);
    

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 2023-03-08
      • 2016-07-05
      • 2018-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-26
      相关资源
      最近更新 更多