2012-05-23 77 views
4

com.google.common.base.Optional中是否有Json串行器/解串器?JSON:序列化番石榴可選

開箱這似乎並沒有與傑克遜合作的,見下圖:

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); 
} 

}

- > { 「的myString」:{ 「禮物」:真正}}

+0

您能否提供異常堆棧跟蹤? –

+0

也沒有例外。輸出的序列化是{「myString」:{「present」:true}} 但是,我錯過了字符串的實際值 – Hansi

回答

3

有一個庫番石榴傑克遜串行器/解串器here。然而,沒有人爲optional。但它是一個非常基礎的課程,你可以輕鬆地自己寫一個樣本。然後你可以將代碼傳遞給Tatu,這樣他可以將它添加到庫中,這將不勝感激。

+2

對版本2.1及更高版本(2013年11月) 。 – StaxMan

12

Jackson在GitHub上確實有一個Guava module,但可選不支持(尚)。看起來像一個相當簡單的串行器/解串器來實現;行爲應該是相當類似@JsonUnwrapped,讓您簡單的測試結果應該是:

{「的myString」:「後的TestString」}

和一個Optional.absent序列化形式應該是:

{ 「的myString」:空}

更新:好象很簡單,所以我剛剛實現了它,並將其推到GitHub上。您可以通過官方回購獲得並從源代碼構建,或等待下一次正式發佈。請享用!

+3

按照其他問題的說明,這包括在Guava模塊的2.1版中。 – StaxMan

+0

'新的ObjectMapper()。registerModule(new GuavaModule())。readValue(..)'現在適用於我,截至2016年11月16日 – yiwei