Дооснащение 2.0 addConverterFactory для замены " на "

в моей строке 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("&quot;", "\"")\\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, потому что это будет много грязной замены везде. Спасибо за любой совет.


person tsohtan    schedule 06.09.2016    source источник


Ответы (1)


Я делаю ошибку в этой строке кода, она должна заканчиваться обратной косой чертой: перед ".

.replace("&quot;", "\\\"")
person tsohtan    schedule 07.09.2016