java 如果TypeAdapter转换null-value,如何跳过gson生成的json文本中的null值?

68bkxrlz  于 2023-06-20  发布在  Java
关注(0)|答案(1)|浏览(94)

我通过写入毫秒为Type Instant创建了一个TypeAdapter。如何处理instant-field为null的情况。我不想写一种特殊的条目,比如-1L,我以后可以在阅读过程中转换为null(见下面的例子)。我想跳过生成的json-text中的条目,因为这是默认情况。
示例:

gsonBuilder.registerTypeAdapter(Instant.class, new TypeAdapter<Instant>(){
            @Override
            public void write(final JsonWriter jsonWriter, final Instant instant) throws IOException {
                if (instant != null) {
                    jsonWriter.value(instant.toEpochMilli());
                } else {
                    jsonWriter.value(-1L);
                }
            }

            @Override
            public Instant read(final JsonReader jsonReader) throws IOException {
                long millisEpoch = jsonReader.nextLong();
                if (millisEpoch == -1) {
                    return null;
                } else {
                    return Instant.ofEpochMilli(millisEpoch);
                }
            }
        });
0ejtzxu1

0ejtzxu11#

这很简单,我认为您可以修改您的TypeAdapter来检查即时值是否为null,而不是将其写入JSON输出
让我用一个简单的例子解释一下,首先,在write方法中,我检查Instant值是否为null,并写入一个null值而不是epoch毫秒,这将跳过JSON输出中的null值,在read方法中,我仍然检查-1L的特殊情况,以将其转换为null

gsonBuilder.registerTypeAdapter(Instant.class, new TypeAdapter<Instant>() {
    @Override
    public void write(final JsonWriter jsonWriter, final Instant instant) throws IOException {
        if (instant != null) {
            jsonWriter.value(instant.toEpochMilli());
        } else {
            jsonWriter.nullValue();
        }
    }

    @Override
    public Instant read(final JsonReader jsonReader) throws IOException {
        long millisEpoch = jsonReader.nextLong();
        if (millisEpoch == -1) {
            return null;
        } else {
            return Instant.ofEpochMilli(millisEpoch);
        }
    }
});

祝你好运!

相关问题