1

在我正在使用的 API 中,我收到某个部分作为纯 JSON 数组,而不是普通的键 => 值对。它很愚蠢,但这就是我必须处理的。

例子:

{"build":29625,"list": [
   [312218505,1000,624437010,21997878697,35228,0,0,0],
   [186873474,0,0,0,0,-1,0,0]
   ...
]}

问题是让 Google GSON 将每个数组位置映射到普通对象中的字段。不出所料,没有任何本机支持,我不得不推出自己的解决方案:每个需要转换的“请求”都实现了一个 CustomConvert 接口,该接口具有convertToObjects()convertToJson()方法。每个“条目”都有一堆带有@ArrayPosition(number)注释的字段。convert 方法在两个列表之间进行转换。

由于这很丑陋,有没有更好的方法来使用 Google GSON 甚至另一个用于 Java 的 JSON 库来做到这一点?

4

1 回答 1

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;
    }

}
于 2013-05-10T21:33:39.903 回答