Gsonは、元の質問の状況に対してカスタム逆シリアル化が必要です。以下はこのような例の1つです。代わりにカスタムDを使用して
[{"text":"some text"},{"text":""}]
:
[
{
"text":"some text"
},
{
"text":{}
}
]
Foo.java:
import java.io.FileReader;
import java.lang.reflect.Type;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
public class Foo
{
public static void main(String[] args) throws Exception
{
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(String.class, new StringDeserializer());
Gson gson = gsonBuilder.create();
Thing[] things = gson.fromJson(new FileReader("input.json"), Thing[].class);
System.out.println(gson.toJson(things));
}
}
class Thing
{
String text;
}
class StringDeserializer implements JsonDeserializer<String>
{
@Override
public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
throws JsonParseException
{
if (json.isJsonPrimitive()) return json.getAsString();
return "";
}
}
出力input.json
もちろん、Thing.class
型のエシリアライザも可能です。これは、String
ごとに追加の処理を追加しないという利点がありますが、Thing
の他のすべての属性を「手動で」処理することに悩まされます。
Bugzillaで使用しているJSONインターフェイスは何ですか?私はJSON-RPCインターフェイスの作成者です。それが起こる状況は想像できません。これがREST APIの場合、それは別の話です。これは、別々に管理された別個の製品です。 –
これは私が使用しているREST APIです。 –