0

巨大な json ファイル (200mb) の解析に問題があります。最初に、JACKSON を使用して json をツリーとして解析しようとしました。ただし、ヒープサイズの問題が発生しました。何らかの理由で、ヒープ サイズを増やすことはできません。

JSON 形式:

{ 
    "a1":{ "b1":{"c1":"somevalue", "c2":"somevalue"}, ... },
    "a2":{ "b1":{"c1":"somevalue"},"c3":"somevalue"}, ... },
    ....
}

私がやりたいのは、次のような文字列を生成することです

str1 = "{ "b1":{"c1":"somevalue", "c2":"somevalue"}, ... }"
str2 = "{ "b1":{"c3":"somevalue"},"c4":"somevalue"}, ... }"

ヒープの問題なしでこれを行う方法はありますか?

Pythonでは、これを行う簡単な方法があり、ヒープの問題はありません(JVMなし)

data  = json.loads(xxx)
for key,val in data.iteritems():
    puts val

いくつかの考え: 文字列のみが必要なため、ジャクソン ツリー アプローチを使用する必要はないかもしれません。ジャクソンのストリーミングはオプションかもしれませんが、私たちの json 形式は非常に柔軟であるため、それを書くのは困難です。どんな提案でも大歓迎です!

ありがとう

4

2 に答える 2

0

オブジェクトベースのデータ バインディングを使用すると、メモリ効率が少し向上するため、構造に一致するように Java クラスを定義できる場合は、はるかに優れた方法です。高速で、メモリの使用量が少なくなります。ただし、構造が事前にわかっていない場合は、ツリー モデルが必要になることがあります。

ストリーミング API が役立ちます。アプローチを組み合わせることもできます。JSON トークンを反復処理してから、JsonParser.readValueAs(MyType.class)またはを使用しますJsonParser.readValueAsTree()。これにより、JSON 入力のサブセットのメモリ内ツリーまたはオブジェクトのみを構築できます。

于 2013-07-22T17:40:13.940 に答える