2012-11-12 28 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

相关问题