JSON:Serialize Guava可选

时间:2012-05-23 16:07:25

标签: json serialization jackson guava optional

com.google.common.base.Optional是否有Json Serializer / Deserializer?

开箱即用,这似乎不适用于杰克逊,见下文:

package com.example;

import java.io.IOException;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;

import com.google.common.base.Optional;

public class TestClass {

public Optional<String> myString;

public TestClass() {
    myString = Optional.of("testString");
}

public static void main(String[] args) throws JsonGenerationException, JsonMappingException, IOException {
    TestClass testClass = new TestClass();
    ObjectMapper objectMapper = new ObjectMapper();
    String jsonString = objectMapper.writeValueAsString(testClass);
    System.out.println(jsonString);
}

}

- &GT; { “的myString”:{ “存在”:真}}

3 个答案:

答案 0 :(得分:12)

GitHub上的Jackson确实有Guava module,但尚未支持Optional。看起来像一个相当简单的串行器/解串器来实现;行为应该与@JsonUnwrapped非常相似,所以对于你的简单测试,结果应该是:

{ “的myString”: “的TestString”}

对于Optional.absent,序列化表格应为:

{ “的myString”:空}

更新:看起来很简单,所以我刚刚实现了它并将其推送到GitHub。您可以通过官方仓库获取并从源代码构建,或等待下一个正式版本。享受!

答案 1 :(得分:3)

有一个带有Guava Jackson序列化器/反序列化器here的库。但是optional没有人。但这是一个非常基础的课程,你可以轻松地自己编写一个样本。然后你可以将代码传递给Tatu,这样他就可以将它添加到库中了,这将是值得赞赏的。

答案 2 :(得分:0)

我有同样的问题,我通过使用JsonSerializer和JsonDeserializer作为How to serialize / deserialize a Option<> class (functional java) with JSON?解决了我的问题。希望这会有所帮助。