この記事では、複数のネストされた JSON オブジェクトを含む JSON ファイルからデータを抽出するという課題について説明します。このようなファイルは、大規模なデータセットを扱うときに問題を引き起こすことがよくあります。
次のように、複数の JSON オブジェクトを含む JSON ファイルについて考えてみましょう。
<code class="json">{"ID":"12345","Timestamp":"20140101", "Usefulness":"Yes", "Code":[{"event1":"A","result":"1"},…]} {"ID":"1A35B","Timestamp":"20140102", "Usefulness":"No", "Code":[{"event1":"B","result":"1"},…]} {"ID":"AA356","Timestamp":"20140103", "Usefulness":"No", "Code":[{"event1":"B","result":"0"},…]} …</code>
タスクは抽出することです。各オブジェクトの「タイムスタンプ」と「有用性」の値をデータ フレームに変換します:
Timestamp | Usefulness |
---|---|
20140101 | Yes |
20140102 | No |
20140103 | No |
... | ... |
この課題に対処するために、Python の json.JSONDecoder.raw_decode メソッドを採用します。 。この方法では、「積み重ねられた」JSON オブジェクトの大きな文字列をデコードできます。解析されたオブジェクトの最後の位置と有効なオブジェクトを返します。返された位置を raw_decode に戻すことで、その時点から解析を再開できます。
<code class="python">from json import JSONDecoder, JSONDecodeError import re NOT_WHITESPACE = re.compile(r'\S') def decode_stacked(document, pos=0, decoder=JSONDecoder()): while True: match = NOT_WHITESPACE.search(document, pos) if not match: return pos = match.start() try: obj, pos = decoder.raw_decode(document, pos) except JSONDecodeError: # Handle errors appropriately raise yield obj s = """ {“a”: 1} [ 1 , 2 ] """ for obj in decode_stacked(s): print(obj)</code>
このコードは、文字列 s 内の JSON オブジェクトを反復処理し、各オブジェクトを出力します。
{'a': 1} [1, 2]
提供されたソリューションは、単一のファイルに埋め込まれた複数のネストされた JSON オブジェクトからデータを抽出するという課題に効果的に対処します。 json.JSONDecoder.raw_decode メソッドを利用し、潜在的なエラーを処理することで、大規模なデータセットを効率的に処理できます。 decode_stacked 関数は、このようなファイル形式を処理するための再利用可能なツールとして使用できます。
以上がPython で複数の埋め込みオブジェクトを含む JSON データを効率的に解析するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。