使用Gson将JSON转换为POJO:JsonSyntaxException

时间:2014-11-23 18:46:23

标签: java json gson

我从服务器获得JSON响应,我想将其转换为POJO,如下所示:

public class MeasureDataGetPOJO {
    @SerializedName("CODE")
    private String code = null;

    @SerializedName("USER")
    private User user = null;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public User getUser() {
        return user;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public class User {
        private List<MeasureData> measureDatas = null;

        public List<MeasureData> getMeasureDatas() {
            return measureDatas;
        }

        public void setMeasureDatas(List<MeasureData> measureDatas) {
            this.measureDatas = measureDatas;
        }

        public class MeasureData {

            @SerializedName("MT_TIME")
            private String time = null;

            @SerializedName("MT_VALUE")
            private String value = null;

            public String getTime() {
                return time;
            }

            public void setTime(String time) {
                this.time = time;
            }

            public String getValue() {
                return value;
            }

            public void setValue(String value) {
                this.value = value;
            }
        }
    }
}

我从服务器获得的JSON:

{
"CODE":"012",
"USER":
    [
        {
            "MT_TIME":"1412882760",
            "MT_VALUE":"319",
        }
    ]
}

我从Gson得到的错误是:

Caused by: com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 10

JSON或POJO是否有问题我尝试将JSON映射到? 我期待一个用户有多对MT_TIME和MT_VALUE。

所以我得到一个状态代码和一个用户对象。用户有一对MT_TIME和MT_VALUE对。 之后,用户对象中可能会有更多用户信息。

这只是猜测,但这是正确的json吗?

{
"CODE":"012",
"USER": 
{
    "MEASURE_DATA": 
    [
        {
            "MT_TIME":"1412882760",
            "MT_VALUE":"319"
        }
    ]
}

}

在这里附加一个SerializedName:

@SerializedName("MEASURE_DATA")
private List<MeasureData> measureDatas = null;

2 个答案:

答案 0 :(得分:2)

预计。从你的课堂上讲,JSON应该是这样的:

{
    "CODE": "012",
    "USER": {
        "MT_TIME": "1412882760",
        "MT_VALUE": "319",
    }
}

但是您显示的JSON中的用户字段位于数组中。

如果这意味着您所期望的是用户列表而不是仅一个用户,那么将POJO中的字段替换为List<User>;否则,修复JSON。

答案 1 :(得分:0)

您需要用户列表。在"USER":之后看到你的json字符串中有[

这就是错误所说的:

Expected BEGIN_OBJECT but was BEGIN_ARRAY