0

私のプロジェクトでは、gson を使用しています。たとえば、jsonサブオブジェクトをクラスから文字列に逆シリアル化したいときに問題があります

Class X
{
    Object1 x1 // expected json -> '{"param1": "pvalue", "param2":"pvalue"}'
    Object2 x2 //expected json -> '{"param1": "pvalue", "param2":"pvalue"}'
    String x3 //expected json ->'{"param1": "pvalue", "param2":"pvalue"}'
}

Gson は x3 の内容が json オブジェクトであるため、デシリアライズできませんが、Java オブジェクトではなく文字列として必要です。Class X { Object1 x1 // 予期される json -> '{"param1": "pvalue", "param2":"pvalue"}' Object2 x2 //予期される json -> '{"param1": "pvalue", "param2 ":"pvalue"}' String x3 //expected json ->'{"param1": "pvalue", "param2":"pvalue"}' } x3 の内容を物体。
ありがとう

4

2 に答える 2

0

次のコードは問題なく動作します。ただし、それが解析しようとしている Json 構造であるかどうかはよくわかりません。

public class Test
{
    public static void main( String[] args )
    {
        Gson gson = new Gson();

        Response response = gson.fromJson( THE_JSON, Response.class );

        System.out.println( response.object1 );
        System.out.println( response.object1 );
        System.out.println( response.stringx );
    }

    class Response
    {
        @SerializedName("Objectx1")
        Objectx object1;

        @SerializedName("Objectx2")
        Objectx object2;

        @SerializedName("Stringx")
        String stringx;

        class Objectx
        {
            @SerializedName("param1")
            String param1;

            @SerializedName("param2")
            String param2;
        }
    }
}

THE_JSON は次のとおりです。

{
    "Objectx1": {
        "param1": "value1",
        "param2": "value2"
    },
    "Objectx2": {
        "param1": "value3",
        "param2": "value4"
    },
    "Stringx": '{
        "param3": "value3",
        "param4": "value4"
    }'
}

Stringx 値を一重引用符で囲んでいることに注意してください。

于 2012-11-16T14:37:59.510 に答える
0

String のカスタム TypeAdapter を登録して修正することができます。

GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(String.class, new MyTypeAdapter());

Gson gson = gsonBuilder.create();
....

Javadoc ユーザーガイド

于 2012-11-16T14:25:57.190 に答える