в моей строке JSON содержится "
{"value":" "Testing""}
Если не выполнять какое-либо преобразование или замену строки, синтаксический анализатор модификации по умолчанию не заботится об escape-символах, и в моем результате будет ", поэтому я нашел код здесь, которые помогают мне удалить escape-символы перед процессом анализа модификации, вот код модификации
public class MyJsonConverter extends Converter.Factory {
public static MyJsonConverter create() {
return create(new Gson());
}
public static MyJsonConverter create(Gson gson) {
return new MyJsonConverter(gson);
}
private final Gson gson;
private MyJsonConverter(Gson gson) {
if (gson == null) throw new NullPointerException("gson == null");
this.gson = gson;
}
@Override
public Converter<ResponseBody, ?> responseBodyConverter(Type type, Annotation[] annotations,
Retrofit retrofit) {
TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
return new GsonResponseBodyConverter<>(gson, adapter);
}
@Override
public Converter<?, RequestBody> requestBodyConverter(Type type,
Annotation[] parameterAnnotations, Annotation[] methodAnnotations, Retrofit retrofit) {
TypeAdapter<?> adapter = gson.getAdapter(TypeToken.get(type));
return new GsonRequestBodyConverter<>(gson, adapter);
}
final class GsonRequestBodyConverter<T> implements Converter<T, RequestBody> {
private final MediaType MEDIA_TYPE = MediaType.parse("application/json; charset=UTF-8");
private final Charset UTF_8 = Charset.forName("UTF-8");
private final Gson gson;
private final TypeAdapter<T> adapter;
GsonRequestBodyConverter(Gson gson, TypeAdapter<T> adapter) {
this.gson = gson;
this.adapter = adapter;
}
@Override
public RequestBody convert(T value) throws IOException {
Buffer buffer = new Buffer();
Writer writer = new OutputStreamWriter(buffer.outputStream(), UTF_8);
JsonWriter jsonWriter = gson.newJsonWriter(writer);
adapter.write(jsonWriter, value);
jsonWriter.close();
return RequestBody.create(MEDIA_TYPE, buffer.readByteString());
}
}
final class GsonResponseBodyConverter<T> implements Converter<ResponseBody, T> {
private final Gson gson;
private final TypeAdapter<T> adapter;
GsonResponseBodyConverter(Gson gson, TypeAdapter<T> adapter) {
this.gson = gson;
this.adapter = adapter;
}
@Override
public T convert(ResponseBody value) throws IOException {
String dirty = value.string();
String clean = dirty.replace("<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" +
"<string xmlns=\"http://tempuri.org/\">","").replace("</string>","");
clean = clean
.replace(""", "\"")\\This line!!!
.replace("\\/", "/") ;
try {
return adapter.fromJson(clean);
} finally {
value.close();
}
}
}
}
когда я выполню этот код, он позже завершится сбоем в коде синтаксического анализа модификации и выдаст мне эту ошибку
com.google.gson.stream.MalformedJsonException: незавершенный объект в строке 1, столбце 1121, путь $.entry_list[0].name_value_list.highlight1_c.value
Я понимаю смысл этой ошибки, но как правильно это сделать? И мне не нравится заменять escape-символы после модификации Parse Json в POJO, потому что это будет много грязной замены везде. Спасибо за любой совет.