在我正在使用的API中,我收到某个部分作为普通的JSON数组,而不是普通的密钥=>价值对。它很愚蠢,但这就是我必须要处理的事情。
示例:
{"build":29625,"list": [
[312218505,1000,624437010,21997878697,35228,0,0,0],
[186873474,0,0,0,0,-1,0,0]
...
]}
问题是让Google GSON将每个数组位置映射到普通对象中的字段。由于没有任何本机支持,我不得不推出自己的解决方案:需要转换的每个“请求”都实现了一个具有convertToObjects()
和convertToJson()
方法的CustomConvert接口。每个“条目”都有一堆带有@ArrayPosition(number)
注释的字段。转换方法在两个列表之间进行转换。
由于这很难看,有没有更好的方法来使用Google GSON甚至是另一个Java的JSON库?
答案 0 :(得分:2)
上面评论的例子,但这是我想要达到的思路。注意我没有测试这个或任何东西,但至少它应该让你走在路上,如果你想走这条路。
class OuterObject {
String build;
List<InnerObject> objectList = new ArrayList<InnerObject>();
}
class InnerObject {
int field1, field2, field3, field4, field5, field6, field7, field8;
public InnerObject(int[] params) {
// assign params accordingly
}
}
class MyDeserializer implements JsonDeserializer<OuterObject> {
@Override
public OuterObject deserialize(JsonElement je, Type type, JsonDeserializationContext jdc) throws JsonParseException
{
OuterObject oo = new OuterObject();
JsonObject jo = je.getAsJsonObject();
oo.build = jo.get("build").getAsString();
JsonArray innerObjArrays = jo.getAsJsonArray("list");
for (JsonElement e : innerObjArrays)
{
JsonArray innerArray = e.getAsJsonArray();
// This is ugly but should give you the gist
InnerClass ic = new InnerClass((int[])jdc.deserialize(innerArray, int[].class));
oo.objectList.add(ic);
}
return oo;
}
}