0

次のようにJerksonを使用して、scalaケースクラスをJSON文字列にシリアライズしようとしています:

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

pageListPage数百万のオブジェクトで非常に大きいです。呼び出しは次の例外で失敗します。

原因: org.codehaus.jackson.map.JsonMappingException:
[java.lang.ArrayIndexOutOfBoundsException のメッセージなし]

4

2 に答える 2

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

詳細: Jackson ストリーミング ドキュメント

于 2012-11-12T13:07:56.203 に答える
0

「数百万」のオブジェクトがあることを考えると、長さの制限であるに達している可能性があると思いますStringOutputStream、すなわち、に生成してみてくださいJson.generate(pageList, out)

于 2012-11-12T06:03:08.037 に答える