3

JSON 形式で文字列に書き込む機能を既に備えているペイロード クラスがあります。ここで、ペイロード クラスの配列を含む JSON オブジェクトを返したいと思います。私は GSON を使用しており、payload.getAsJson() を呼び出してその生の文字列を JsonWriter に書き込むだけのカスタム型アダプターを作成したいと考えています。残念ながら、文字列がエスケープされるため、これはうまくいきません。

何か案は?

4

2 に答える 2

1

@Trinimon のどのバージョンが使用されていたかはわかりませんGsonが、@FilipFrącz が指摘したように、文字列はまだエスケープされています。

幸いなことに、これはマイナーな修正です。でMyTypeAdapter単純に置き換えout.value(value.getAsJson());ますout.jsonValue(value.getAsJson());

バージョン: com.google.code.gson:gson:2.6.2

例えば

JsonRawTypeAdapter.java

public class JsonRawTypeAdapter extends TypeAdapter<JsonRaw> {

    @Override
    public JsonRaw read(JsonReader in) throws IOException {
        if (in.peek() == JsonToken.NULL) {
            in.nextNull();
            return null;
        }
        return new JsonRaw(in.nextString());
    }

    @Override
    public void write(JsonWriter out, JsonRaw value) throws IOException {
        if (value == null) {
            out.nullValue();
            return;
        }
        out.jsonValue(value.getAsJson());
    }

}

WebMvcConfig.java (スニペット)

Gson gson = new GsonBuilder()
        .registerTypeAdapter(JsonRaw.class, new JsonRawTypeAdapter())
        .create();
于 2016-06-21T04:52:45.037 に答える