1

私が使用している 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)注釈付きのフィールドが多数あります。convert メソッドは、2 つのリストを変換します。

これは醜いので、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 に答える