首页 > 解决方案 > 不带键的 JSON 数组的 POJO [Long, Double]

问题描述

我有这个 JSON:

{
    "entries": [
        [
            1545230391429,        // long
            3799.9872120695404    // double
        ],
        [
            1545230685249,
            3796.6928339346546
        ],
        [
            1545231000586,
            3793.6487491594485
        ],
        ...
    ]
}

这个 POJO 可以将它们作为字符串处理,但是我需要手动将它们转换为正确的类型...... aaaand 它是有风险的:

@SerializedName("entries")
@Expose
private List<List<String>> entries;

我尝试了更强大的方法,但它无法正常工作:

public class Entry {
    public Long timestamp;
    public Double value;
}

@SerializedName("entries")
@Expose
private List<Entry> entries;

我明白了

com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: 预期 BEGIN_OBJECT 但在第 1 行第 13 列路径 $.entries[0] 处为 BEGIN_ARRAY

我认为问题在于Entry应该是 a List,但我无法列出两种不同类型的列表。

如何进行?

标签: javaandroidgsonpojo

解决方案


MyData 类

@SerializedName("entries")
@Expose
private List<List<String>> entries;

尝试使用自定义反序列化(这只是一个示例,请检查代码)

JsonDeserializer<MyData> deserializer = new JsonDeserializer<MyData>() {  
    @Override
    public MyData deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {

        List myList = new ArrayList<Entry>()

        JSONArray arr = obj.getJSONArray("entries");

        for (int i = 0; i < arr.length(); i++) {
          Entry entry = new Entry(
                new Long(arr[0]),
                new Long(arr[1])
          );
          myList.add(entry)
        }



        return new MyData(myList);
    }
};

推荐阅读