【问题标题】:During converting json string into bean object gson().fromJson() method throwing “Expected BEGIN_OBJECT but was BEGIN_ARRAY”在将 json 字符串转换为 bean 对象期间,gson().fromJson() 方法抛出“Expected BEGIN_OBJECT but was BEGIN_ARRAY”
【发布时间】:2015-01-07 20:51:42
【问题描述】:

我正在尝试将 json 字符串转换为 bean 对象,如下所示 -

 PinsRequestTo objPinsRequestTo = new PinsRequestTo();
 objPinsRequestTo = new Gson().fromJson(pinMessageJson, PinsRequestTo.class);

我的 Bean 对象如下

 public class PinsRequestTo {
   private String message;
   private JsonArray keypattern_id_list;

   public String getMessage() {
       return message;
   }

   public void setMessage(String message) {
       this.message = message;
   }

   public JsonArray getKeypattern_id_list() {
       return keypattern_id_list;
   }

   public void setKeypattern_id_list(JsonArray keypattern_id_list) {
       this.keypattern_id_list = keypattern_id_list;
   }
}

json字符串如下

{
 "keypattern_id_list":["C0000011MSZPIN2015010760417236","C0000011MSZPIN2015010760294357"]
}

我在这个过程中遇到了如下异常

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 2 column 25
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:176)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
at com.google.gson.Gson.fromJson(Gson.java:795)
at com.google.gson.Gson.fromJson(Gson.java:761)
at com.google.gson.Gson.fromJson(Gson.java:710)
at com.google.gson.Gson.fromJson(Gson.java:682)
......
......

我想用 json 字符串中的数组设置 PinsRequestTo 的属性 keypattern_id_list。我应该怎么办。如果还有其他方法,请告诉我。

提前致谢

【问题讨论】:

  • 您确定您的源 JSON 没有被[]包围?

标签: java json gson getjson


【解决方案1】:

在您的 PinsRequestTo 类中将 keypattern_id_list 变量类型从 JsonArray 更改为 List<String>,然后它应该如下所示:

public class PinsRequestTo {
    private String message;
    private List<String> keypattern_id_list;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public List<String> getKeypattern_id_list() {
        return keypattern_id_list;
    }

    public void setKeypattern_id_list(List<String> keypattern_id_list) {
        this.keypattern_id_list = keypattern_id_list;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("PinsRequestTo [message=").append(message)
                .append(", keypattern_id_list=").append(keypattern_id_list)
                .append("]");
        return builder.toString();
    }
}

反序列化逻辑如下:

String pinMessageJson = "{\"keypattern_id_list\":[\"C0000011MSZPIN2015010760417236\",\"C0000011MSZPIN2015010760294357\"]}";

PinsRequestTo objPinsRequestTo = new Gson().fromJson(pinMessageJson, PinsRequestTo.class);
System.out.println(objPinsRequestTo);

这是打印语句的输出:

PinsRequestTo [message=null, keypattern_id_list=[C0000011MSZPIN2015010760417236, C0000011MSZPIN2015010760294357]]

gson 的 maven 依赖是:

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.2.2</version>
</dependency>

【讨论】:

    猜你喜欢
    • 2021-12-17
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多