2012-11-12 71 views
0

我試圖序列化Scala的case類使用Jerkson這樣的JSON字符串:Jerkson JsonMappingException

case class Page(title: String, id: String, ls: List[(String, String, Int)]) 
val pageList = new mutable.ArrayBuffer[Page]() 
val jsonString = Json.generate(pageList) 

pageList是幾百萬Page對象非常大。 調用失敗與此異常:

產生的原因:org.codehaus.jackson.map.JsonMappingException:
[爲java.lang.ArrayIndexOutOfBoundsException沒有消息]

回答

0

既然你已經有「數百萬」的物體,我猜你可能會達到String的長度限制。嘗試生成一個OutputStream,即Json.generate(pageList, out)

1

您可能需要考慮使用Streaming解決方案。您可以使用傑克遜流API之一:

JsonGenerator jg = jsonFactory.createJsonGenerator(file, JsonEncoding.UTF8); // or Stream, Reader 

或者,你可以使用一個TokenBuffer(這被認爲是最佳做法某些情況下):

TokenBuffer buffer = new TokenBuffer(); 
// serialize object as JSON tokens (but don't serialize as JSON text!) 
objectMapper.writeValue(buffer, myBean); 

詳情:Jackson Streaming Documentation

相關問題