テーマ、知りたいこと
jsonデータをpandasデータ化するには?
背景、状況
あるデータを、jsonファイルでpythonで取り込み、pandasデータ形式で加工
をする予定です。複雑な入れ子のjsonデータについて、どのようにエラー回避
して、pandasデータ化する方法が知りたいです。
コード内の”test4.json"の中身は以下です。 {'metadata': {'detail': '橋:調書の様式別形式に則ったデータ取得用API', 'parameter': {'nendo': 2021.0, 'pattern': 3, 'shisetsuid': '37.×××××,139.×××××'}, 'title': '橋:調書様式別取得API'}, 'result': [{'c3': [{'diameter': '1', 'local_figs': [{'file_name': '2104230137.JPG', 'memo': '側面(全景)\r\n左が起点側', 'photo_date': '20210423', 'photo_no': 1}, {'file_name': '2107280142.JPG', 'memo': '正面(全景)\r\n手前が起点側', 'photo_date': '20210728', 'photo_no': 2}, {'file_name': '2104230136.JPG', 'memo': '径間別側面\r\n左が起点側', 'photo_date': '20210423', 'photo_no': 3}, {'file_name': '2107280140.JPG', 'memo': '橋面\r\n手前が起点側', 'photo_date': '20210728', 'photo_no': 4}, {'file_name': '2104230115.JPG', 'memo': '桁下面\r\n手前が起点側', 'photo_date': '20210423', 'photo_no': 5}, {'file_name': '2111100107.JPG', 'memo': '支承(A1橋台)', 'photo_date': '20211111', 'photo_no': 6}, {'file_name': '2111100108.JPG', 'memo': '支承(P1橋脚)', 'photo_date': '20211111', 'photo_no': 7}, {'file_name': '2111100134.JPG', 'memo': 'A1橋台', 'photo_date': '20211111', 'photo_no': 8}, {'file_name': '2111100108.JPG', 'memo': 'P1橋脚\r\n', 'photo_date': '20211111', 'photo_no': 9}, {'file_name': '211108KG55.jpg', 'memo': '点検状況\r\n点検方法:リフト車', 'photo_date': '20211111', 'photo_no': 10}, {'file_name': '211111KG01.JPG', 'memo': '点検状況\r\n点検方法:小型リフト車', 'photo_date': '20211111', 'photo_no': 11}, {'file_name': '211110KG01.JPG', 'memo': '規制状況\r\n車線減少規制', 'photo_date': '20211111', 'photo_no': 12}, {'file_name': '211111KG84.jpg', 'memo': '規制状況\r\n幅員減少規制', 'photo_date': '20211111', 'photo_no': 13}, {'file_name': '211108KG01.JPG', 'memo': 'KYミーティング', 'photo_date': '20211111', 'photo_no': 14}]}, {'diameter': '2', 'local_figs': [{'file_name': '2104230135.JPG', 'memo': '径間別側面\r\n左が起点側', 'photo_date': '20210728', 'photo_no': 15}, {'file_name': '2107280139.JPG', 'memo': '橋面\r\n手前が起点側', 'photo_date': '20210728', 'photo_no': 16}, {'file_name': '2111080046.JPG', 'memo': '桁下面\r\n手前が起点側', 'photo_date': '20211111', 'photo_no': 17}, {'file_name': '2111080074.JPG', 'memo': '支承(P2橋脚)', 'photo_date': '20211111', 'photo_no': 18}, {'file_name': '2111080091.JPG', 'memo': 'P2橋脚\r\n', 'photo_date': '20211108', 'photo_no': 19}]}, {'diameter': '3', 'local_figs': [{'file_name': '2104230134.JPG', 'memo': '径間別側面\r\n左が起点側', 'photo_date': '20210423', 'photo_no': 20}, {'file_name': '2107280138.JPG', 'memo': '橋面\r\n手前が起点側', 'photo_date': '20210728', 'photo_no': 21}, {'file_name': '2104230133.JPG', 'memo': '桁下面\r\n手前が起点側', 'photo_date': '20210423', 'photo_no': 22}, {'file_name': '2111090094.JPG', 'memo': '支承(A2橋台)', 'photo_date': '20211111', 'photo_no': 23}, {'file_name': '2104230132.JPG', 'memo': 'A2橋台', 'photo_date': '20210423', 'photo_no': 24}]}], 'nendo': 2021}], 'resultset': {'count': 1, 'is_error': False}} コードは以下です。 #複雑な構造(test4.json)は、エラー import json import pandas as pd jsonfile='test4.json' with open(jsonfile, encoding='utf-8') as f: d = json.load(f) #ノーマライズ df=pd.json_normalize(d)
エラーコードは、以下です。
JSONDecodeError Traceback (most recent call last) <ipython-input-11-b00b8da72c25> in <cell line: 6>() 5 jsonfile='test4.json' 6 with open(jsonfile, encoding='utf-8') as f: ----> 7 d = json.load(f) 8 #ノーマライズ 9 df=pd.json_normalize(d) 3 frames /usr/lib/python3.10/json/decoder.py in raw_decode(self, s, idx) 351 """ 352 try: --> 353 obj, end = self.scan_once(s, idx) 354 except StopIteration as err: 355 raise JSONDecodeError("Expecting value", s, err.value) from None JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
調査したこと・試したこと
melianさんのアドバイスである「 jsonデータをシングルコーテーションをダブルコーテーションにした
場合」、違うエラーが出た記憶があります。
6/10以降に、再度、「 jsonデータをシングルコーテーションをダブルコーテーション」したもので、
やってみます。(これで、いいのかな?)
PC環境
開発環境:Google Colaboratory
プログラム言語:python3
OS:windows10 Home
CPU:Intel(R) Core(TM) i7-7500U CPU@2.70GHz 2.90GHz

回答2件
あなたの回答
tips
プレビュー