JSON 数组的 POJO 没有键 [Long, Double]
POJO for JSON array without keys [Long, Double]
我有这个JSON:
{
"entries": [
[
1545230391429, // long
3799.9872120695404 // double
],
[
1545230685249,
3796.6928339346546
],
[
1545231000586,
3793.6487491594485
],
...
]
}
此 POJO 可以将它们作为字符串处理,但随后我需要手动将它们转换为适当的类型...aaa,这有风险:
@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:
Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 13 path
$.entries[0]
我认为问题在于 Entry
应该是 List
,但我无法列出两种不同的类型。
如何进行?
您正在尝试将二维数组解析为列表。首先,您应该将其解析为二维对象数组,并对其进行迭代解析并填充列表。
您是否尝试过使用保存第一个数组数据的 pojo class(例如 EntryArrayHolder
)。
public class Entry {
public Long timestamp;
public Double value;
}
public class EntryArrayHolder {
private List<Entry> entriesHolder = null;
}
@SerializedName("entries")
@Expose
private List<EntryArrayHolder> entries= null;
希望对您有所帮助!
我的数据Class
@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);
}
};
我有这个JSON:
{
"entries": [
[
1545230391429, // long
3799.9872120695404 // double
],
[
1545230685249,
3796.6928339346546
],
[
1545231000586,
3793.6487491594485
],
...
]
}
此 POJO 可以将它们作为字符串处理,但随后我需要手动将它们转换为适当的类型...aaa,这有风险:
@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: Expected BEGIN_OBJECT but was BEGIN_ARRAY at line 1 column 13 path $.entries[0]
我认为问题在于 Entry
应该是 List
,但我无法列出两种不同的类型。
如何进行?
您正在尝试将二维数组解析为列表。首先,您应该将其解析为二维对象数组,并对其进行迭代解析并填充列表。
您是否尝试过使用保存第一个数组数据的 pojo class(例如 EntryArrayHolder
)。
public class Entry {
public Long timestamp;
public Double value;
}
public class EntryArrayHolder {
private List<Entry> entriesHolder = null;
}
@SerializedName("entries")
@Expose
private List<EntryArrayHolder> entries= null;
希望对您有所帮助!
我的数据Class
@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);
}
};