Gson 에서 null 을 빈 문자열 로 바 꾸 기

3355 단어 jsonandroidgson
json 분석 에는 많은 도구 가 있 습 니 다. 여기 서 가장 자주 사용 되 고 분석 속도 가 가장 빠 른 Gson 을 말 합 니 다. Gson 은 google 집에 서 나 온 것 입 니 다. 한 가지 단점 은 null 교 체 를 설정 할 수 없다 는 것 입 니 다. 우 리 는 서버 가 돌아 오 는 null 을 수 동 으로 대량으로 교체 할 수 밖 에 없습니다. 정상 적 인 인터페이스 정 의 를 내 릴 때 서버 가 null 로 돌아 가 는 것 을 허락 하지 않 고 백 엔 드 결 과 는 항상 null 이 나타 납 니 다!검색 하면 흔히 볼 수 있 는 답 이 있 습 니 다. Gson gson = new GsonBuilder().serializeNulls().create(); 그런데 이 건 반 서열 문 제 를 해결 하지 못 합 니 다. 어떻게 해결 합 니까?나 는 stackoverflow 에서 이 문 제 를 찾 았 는데, 직접 측정 하면 효과 가 있다.http://stackoverflow.com/questions/9483348/gson-treat-null-as-empty-string/24252578#24252578
해결 방법 은 다음 과 같다.
Gson gson  = new GsonBuilder().registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()).create();
//         gson            type
gson.fromJson(json, type);
gson.toJson(type);

/ / NullStringToEmpty Adapter Factory 코드
public class NullStringToEmptyAdapterFactory<T> implements TypeAdapterFactory {
    @SuppressWarnings("unchecked")
    public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) {
        Class<T> rawType = (Class<T>) type.getRawType();
        if (rawType != String.class) {
            return null;
        }
        return (TypeAdapter<T>) new StringNullAdapter();
    }
}

/ / StringNullAdapter 코드
public class StringNullAdapter extends TypeAdapter<String> {
    @Override
    public String read(JsonReader reader) throws IOException {
        // TODO Auto-generated method stub
        if (reader.peek() == JsonToken.NULL) {
            reader.nextNull();
            return "";
        }
        return reader.nextString();
    }
    @Override
    public void write(JsonWriter writer, String value) throws IOException {
        // TODO Auto-generated method stub
        if (value == null) {
            writer.nullValue();
            return;
        }
        writer.value(value);
    }
}

좋은 웹페이지 즐겨찾기