問題タブ [ijson]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
300 参照

python - 4GBのJSONファイルからデータを抽出するには?

次の構造を持つ 4 GB の JSON ファイルがあります。

すべての行を反復処理し、行ごとに ID、名前、その他の詳細を抽出して、CSV ファイルに書き込みたいだけです。

標準的な方法でファイルを開こうとすると、ハングします。次のように、IJSONを使用しようとしています。

これは、ファイルの短い抽出では正常に機能しますが、大きなファイルでは永久にハングします。

この IJSON メソッドも試してみましたが、これは大きな 4GB ファイルで機能するようです。

しかし、これはすべてのリーフノードを順番に出力するように見えます.各トップレベルの行を個別のアイテムとしての概念はありません-これは、任意の数のリーフノードを持つJSONデータの場合、すぐに面倒になります. すべての名前の配列を取得するには、次のようにする必要があります。

このような大きなファイルで、(各リーフではなく) 各行を順番に繰り返す方法はありますか?

0 投票する
1 に答える
1239 参照

python - ijsonを使用してjsonファイルから値を抽出する

次のような大きな JSON ファイルがあります。

ここで、以下のコードを使用してijson (インタラクティブ Json) を使用して、「 details」値から「1000」、「1001」などの変数に存在するリストを抽出しています。

しかし、問題は、上記のコードでfor ループが終了していないことです。1001 で最終リストを出力した後、実行を続けます。

上記のコードの Generator( objects ) がStopIterationに遭遇していないと推測していますが、理由はわかりません。

誰でも助けてもらえますか?少し助けていただければ幸いです。

0 投票する
2 に答える
2884 参照

json - 大規模な Twitter JSON データ (7 GB 以上) を Python にロードする

ツイートを収集するために AWS 経由でパブリック ストリームをセットアップしましたが、予備的な分析を行いたいと考えています。すべてのデータは S3 バケット (5 MB のファイル) に保存されました。

すべてをダウンロードし、すべてのファイルを 1 つにマージしました。各ツイートは、Twitter の仕様に従って標準の JSON オブジェクトとして保存されます。

基本的に、統合ファイルには複数の JSON オブジェクトが含まれます。Python に読み込まれるときに辞書のリストのように見えるように、左角括弧と右角括弧 ( [] ) を追加しました。したがって、構造は次のようになります (ここに Twitter データを投稿できるかどうかはわかりません)。

一番最初のツイートを削除した後、すべてを www.jsonlint.com に入れ、それが有効な JSON データ構造であることを確認しました。

今、私はこのデータを Python に読み込もうとしていて、ツイート内のさまざまな用語の基本的なカウントを実行したいと考えています (たとえば、ツイートのテキストで @HillaryClinton が何回言及されているかなど)。

以前は、より小さなデータセットで、次のようなコードでうまくいくことができました:

次に、それぞれのフィールドのデータを CSV ファイルに書き込み、その方法で分析を実行しました。これは2GBのファイルで機能しました。

7GB のファイルができたので、このメソッドを使用すると、Python が「json.load(data.json)」行で「OSError: [Errno 22] Invalid Argument.

なぜこれが起こっているのかはわかりませんが、ファイル全体を一度にメモリにロードしようとしていることが原因であると予想されます。これは正しいです?

だから、明らかにjsonファイルを解析できるijsonを使用しようとしていました。次のコードを書いてみました。

この実装では、「for item in content」行で「ijson.backends.python.unexpectedsymbol: unexpected symbol '/u201c' at 1」というエラーが表示されます

また、データ ファイルの各行を調べて、JSON 行形式で調べてみました。したがって、各行が JSON オブジェクトであると仮定して、次のように記述しました。

しかし、ここでは、リストへの各エントリは文字列であり、辞書ではなく、必要なデータを解析するのが非常に困難でした。この最後のコードを変更して、必要に応じて機能させる方法はありますか? しかし、その場合でも、そのデータセット全体をリストにロードすると、メモリの制約を考えると、将来の分析が難しくなるのではないでしょうか?

これを進める最善の方法について少し行き詰まっています。この種の分析に Python ツールを使用する方法を学ぼうとしているので、Python でこれを行いたいと思っています。

これについての経験はありますか?私は本当に愚かなのか、それとも本当に基本的なことを誤解しているのでしょうか?

編集:

そこで、まず www.jsonlint.com にアクセスしてデータセット全体を貼り付けたところ、最初のツイートを削除した後、有効な JSON 形式であることがわかりました。したがって、今のところ、その 1 つのファイルを除外しました。

基本的に、上記の形式 ([{json1}, {json2}]) のデータセットがあります。ここで、{} 内の各エンティティはツイートを表します。

これが有効な JSON であることを確認したので、私の目標は、各 JSON を辞書として表現して Python に組み込むことでした (これらのファイルを簡単に操作できるようにするため)。非効率な場合、誰かがここで私の思考プロセスを修正できますか?

そのために、次のことを行いました。

問題は、 「str」には属性「get」がないと言い続けているため、 current_tweet.get が機能していないと言っている最後の行です。そのため、json.loads() が辞書を提供しない理由がわかりません。 ..

編集#2

各行に有効な JSON が含まれるように、[ と ] と末尾のコンマを削除することをユーザーから勧められました。そうすれば、各行で json.loads() を実行できます。アドバイス通りブラケットを外しました。コンマについては、次のようにしました。

これにより、 ValueError: Expecting ':' Delimiter: Line 1 Column 2305 (char 2304)というエラーが発生します

これをデバッグするために、最初の行を印刷しました (つまり、print(no_comma) と言いました)。Python が印刷したものには、実際には複数のツイートが含まれていることに気付きました...「UltraEdit」などのエディターで開くと、各ツイートがは別個の行であるため、各 JSON オブジェクトは改行文字で区切られていると想定しました。しかし、ここで、行ごとに繰り返した後に結果を出力すると、一度に複数のツイートが取り込まれていることがわかります。

別の方法で反復する必要がありますか?コンマを削除する方法は適切ですか、それともファイルを個別に前処理する必要がありますか?

JSON の形式が適切でないことは確かですが、その理由と修正方法がわかりません。これが私の JSON データのサンプルです。これが許可されていない場合は、削除します...

https://ufile.io/47b1

0 投票する
0 に答える
245 参照

python - 大きな (ギガバイト) JSON ファイルの途中での解析エラー

大きな JSON ファイルを解析するためにijson ( https://pypi.python.org/pypi/ijson ) を使用しています。数GBあるので、現実的にすべてをメモリに保存することはできません。問題は、ファイルの途中でパーサーがエラーになることです (特定の例外は UnicodeDecodeError です)。すべてのデータが必要なわけではないので、そのエントリをスキップしても問題ありませんが、エラーが発生した場所を超えて続行することはできません。

私のコードは次のようになります。

ループ内で例外をキャッチしようとすると、解析でエラーが発生するため、キャッチされません。ループの外に置くと、中断したところから続行できません(私の知る限り)。このエラーを回避して続行するにはどうすればよいですか? または、ファイルを開いたりメモリに保存したりする必要のない方法でファイルを修正するにはどうすればよいですか?

0 投票する
1 に答える
2664 参照

python - Python: ijson.parse(in_file) 対 json.load(in_file)

Python で大きな JSON ファイル (~ 2GB) を読み込もうとしています。

次のコードは、小さなファイルではうまく機能しますが、2 行目の MemoryError のため、大きなファイルでは機能しません。

同様の投稿を見て、ほとんどの人が ijson の使用を提案したので、試してみることにしました。

これは大きなファイルサイズの読み取りを処理しましたが、ijson.parse は json.load のように JSON オブジェクトを返さなかったため、残りのコードは機能しませんでした

TypeError: タプルのインデックスは、str ではなく、整数またはスライスでなければなりません

json.load を使用して「投稿」を出力すると、o/p は通常の JSON のように見えます

ijson.parse を使用した後に「投稿」を出力すると、o/p はハッシュ マップのように見えます

私の質問: コードの残りの部分を変更したくないので、ijson.parse(in_file)使用している場合とまったく同じになるように、o/p を JSON オブジェクトに変換する方法があるかどうか疑問に思っていjson.load(in_file)ます。

0 投票する
1 に答える
420 参照

python - Python で ijson を使用して JSON 値を更新する

私は非常に大きな JSON ファイルに取り組んでおり、ijson ライブラリを使用することにしました。

この JSON ファイルの値を更新したいのですが、方法がわかりません。

たとえば、次から:

更新:

ijson ライブラリを使用します。