実現したいこと
pythonでjsonデータ読み込み時、条件に合うデータのみ取得したい。
前提
pythonで、jsonデータ読み込みをしています。
jsonデータの入れ子の構造が、複雑なのかエラーが出ます。
データは、以下を「j3.json」で保存して、コードで読み込むようにしてあります。
jsonデータ
1{'metadata': {'detail': '橋', 2 'parameter': {'id': '37,139'}, 3 'title': '調書'}, 4 'result': [{'調書11': [{'damage_mains': [{'class': '', 5 'construct_type_code': 'S', 6 'damage_level': 'b', 7 'damage_type_value': 'ひびわれ', 8 'element_no': '0101', 9 'material_code': 'C', 10 'part_material_code': 'Mg', 11 'part_material_value': '主桁'}, 12 {'class': '', 13 'construct_type_code': 'S', 14 'damage_level': 'd', 15 'damage_pattern_value': '', 16 'damage_type_value': '剥離・鉄筋露出', 17 'element_no': '0101', 18 'material_code': 'C', 19 'part_material_code': 'Mg', 20 'part_material_value': '主桁'}, 21 {'class': '', 22 'construct_type_code': 'S', 23 'damage_level': 'e', 24 'damage_pattern_value': '', 25 'damage_type_value': '漏水・遊離石灰', 26 'element_no': '0101', 27 'material_code': 'C', 28 'part_material_code': 'Mg', 29 'part_material_value': '主桁'}, 30 {'class': '', 31 'construct_type_code': 'S', 32 'damage_level': 'd', 33 'damage_type_value': 'ひびわれ', 34 'element_no': '0401', 35 'material_code': 'C', 36 'part_material_code': 'Mg', 37 'part_material_value': '主桁'}], 38 'diameter': '1'}, 39 {'damage_mains': [{'class': '', 40 'construct_type_code': 'S', 41 'damage_level': 'a', 42 'damage_type_value': 'ひびわれ', 43 'element_no': '0102', 44 'material_code': 'C', 45 'part_material_code': 'Mg', 46 'part_material_value': '主桁'}, 47 {'class': '', 48 'construct_type_code': 'S', 49 'damage_level': 'a', 50 'damage_type_value': 'NON', 51 'element_no': '0103', 52 'material_code': 'C', 53 'part_material_code': 'Cr', 54 'part_material_value': '横桁'}], 55 'diameter': '2'}], 56 'nendo': 2021}], 57 'resultset': {'count': 1, 'is_error': False}}
発生している問題・エラーメッセージ
TypeError Traceback (most recent call last) <ipython-input-58-6c6866b8204e> in <cell line: 1>() 1 for item in j: ----> 2 if item['part_material_code'] == 'Mg' and item['material_code'] == 'C' and item['damage_type_value'] == 'ひびわれ': 3 damage_level=item['damage_level'] 4 part_material_code=item['part_material_code'] 5 material_code=item['material_code'] TypeError: string indices must be integers
該当のソースコード
import json import ast from pprint import pprint with open('/content/j3.json') as f: j = ast.literal_eval(f.read()) #pprint(j) #'Mg' 、 'C' 、'ひびわれ'の複数条件を満足する時に、damage_level、 part_material_code、material_code、damage_type_value、 #element_no、diameterの値を取得させたい。「j3.json」では、複数条件満足が3通りの該当箇所がある。 #できれば、条件検索で該当箇所が無い場合は、自動でストップしたい(breakを入れる?) for item in j: if item['part_material_code'] == 'Mg' and item['material_code'] == 'C' and item['damage_type_value'] == 'ひびわれ': damage_level=item['damage_level'] part_material_code=item['part_material_code'] material_code=item['material_code'] damage_type_value=item['damage_type_value'] element_no=item['element_no'] diameter=item['diameter'] #csvファイルとして出力 df.to_csv('./diameter+'_'+element_no+'.csv'',index=False,encoding='cp932')#「j3.json」の例では、3ファイルできる予定
試したこと
「TypeError: string indices must be integers」でgoogle検索したが、解決しなかった。
補足情報(FW/ツールのバージョンなど)
googlecolab上で動作

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/06/25 02:12
2023/06/25 02:13