前提・実現したいこと
食べ物の写真から栄養素を書き出す、プログラムを書いています。
JSONファイルに栄養素のデータベースを作り、Pythonのプログラムから呼び出そうとしたところ、以下のようなエラーが発生しました。
発生している問題・エラーメッセージ
JSONDecodeError Traceback (most recent call last) <ipython-input-43-5f7ceaabe07a> in <module> 18 json_file = open('eiyou.json', 'r', encoding="utf-8_sig") 19 # JSONとして読み込む ---> 20 json_obj = json.load(json_file) 21 22 if class_jp(classes[j]) == "ご飯": JSONDecodeError: Expecting property name enclosed in double quotes: line 50 column 1 (char 726)
該当のソースコード
Python
1x = image.img_to_array(img) 2x = np.expand_dims(x, axis=0) 3 4# 学習時にImageDataGeneratorのrescaleで正規化したので同じ処理が必要 5# これを忘れると結果がおかしくなるので注意 6x = x / 255.0 7 8#画像の人物を予測 9pred = vgg_model.predict(x)[0] 10j=np.argmax(pred) 11t=class_jp(classes[j]) 12 13# モジュールのインポート 14# -*- coding: utf-8 -*- 15import json 16 17# ファイルを開く 18json_file = open('eiyou.json', 'r') 19# JSONとして読み込む 20json_obj = json.load(json_file) 21 22if class_jp(classes[j]) == "ご飯": 23 energy = json_obj['gohan']['energy'] 24 calorie = json_obj['gohan']['calorie'] 25 lipid = json_obj['gohan']['lipid'] 26 carbohydrate = json_obj['gohan']['carbohydrate'] 27elif class_jp(classes[j]) == "餃子": 28 energy = json_obj['gyoza']['energy'] 29 calorie = json_obj['gyoza']['calorie'] 30 lipid = json_obj['gyoza']['lipid'] 31 carbohydrate = json_obj['gyoza']['carbohydrate'] 32elif class_jp(classes[j]) == "ハンバーグ": 33 energy = json_obj['hanbagu']['energy'] 34 calorie = json_obj['hanbagu']['calorie'] 35 lipid = json_obj['hanbagu']['lipid'] 36 carbohydrate = json_obj['hanbagu']['carbohydrate'] 37elif class_jp(classes[j]) == "からあげ": 38 energy = json_obj['karaage']['energy'] 39 calorie = json_obj['karaage']['calorie'] 40 lipid = json_obj['karaage']['lipid'] 41 carbohydrate = json_file['karaage']['carbohydrate'] 42elif class_jp(classes[j]) == "蒸しどら": 43 energy = json_obj['mushidora']['energy'] 44 calorie = json_obj['mushidora']['calorie'] 45 lipid = json_obj['mushidora']['lipid'] 46 carbohydrate = json_obj['mushidora']['carbohydrate'] 47elif class_jp(classes[j]) == "パン": 48 energy = json_obj['pan']['energy'] 49 calorie = json_obj['pan']['calorie'] 50 lipid = json_obj['pan']['lipid'] 51 carbohydrate = json_obj['pan']['carbohydrate'] 52elif class_jp(classes[j]) == "ピザ": 53 energy = json_obj['pizza']['energy'] 54 calorie = json_obj['pizza']['calorie'] 55 lipid = json_obj['pizza']['lipid'] 56 carbohydrate = json_obj['pizza']['carbohydrate'] 57elif class_jp(classes[j]) == "ラーメン": 58 energy = json_obj['ramen']['energy'] 59 calorie = json_obj['ramen']['calorie'] 60 lipid = json_obj['ramen']['lipid'] 61 carbohydrate = json_obj['ramen']['carbohydrate'] 62print(t, end="")
試したこと
JSONファイルにコメントアウトした日本語が書いてあったためそれの削除。
ファイルを開く部分に encoding="utf-8_sig" を追加
エラー箇所に""を追加、「AttributeError: 'str' object has no attribute 'read'」の出現、json.loadsに直した所で、「JSONDecodeError: Expecting value」が出現し目的から離れそうだったので振出しに戻る。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー