JSON 形式で文字列に書き込む機能を既に備えているペイロード クラスがあります。ここで、ペイロード クラスの配列を含む JSON オブジェクトを返したいと思います。私は GSON を使用しており、payload.getAsJson() を呼び出してその生の文字列を JsonWriter に書き込むだけのカスタム型アダプターを作成したいと考えています。残念ながら、文字列がエスケープされるため、これはうまくいきません。
何か案は?
@Trinimon のどのバージョンが使用されていたかはわかりませんGson
が、@FilipFrącz が指摘したように、文字列はまだエスケープされています。
幸いなことに、これはマイナーな修正です。でMyTypeAdapter
単純に置き換えout.value(value.getAsJson());
ますout.jsonValue(value.getAsJson());
。
バージョン: com.google.code.gson:gson:2.6.2
例えば
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());
}
}
Gson gson = new GsonBuilder()
.registerTypeAdapter(JsonRaw.class, new JsonRawTypeAdapter())
.create();