我正在尝试使用Jerkson将scala case类序列化为JSON字符串,如下所示:
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 :(得分:1)
您可能需要考虑使用流媒体解决方案。您可以使用其中一个Jackson 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);
答案 1 :(得分:0)
鉴于你有“数百万”对象,我猜你可能会达到String
的长度限制。尝试生成OutputStream
,即Json.generate(pageList, out)
。