質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

152閲覧

PythonでJSONファイルから数値を取りたい

jajajajan

総合スコア5

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/11/11 07:58

前提・実現したいこと

食べ物の写真から栄養素を書き出す、プログラムを書いています。
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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

t_obara

2019/11/11 10:59

jsonを見ないとなんとも言えないので、わたしだったら、まずどのようにするかについて提示いたします。 エラーが出ている箇所の特定をする。 行番号が出ているので、前後のみ残すなどjsonファイル自体を変更しながら、どの部分でデコードエラーになるのかを把握します。 おそらく「Expecting property name enclosed in double quotes」と言うエラーから、ダブルクオートの対応がおかしいのではないかと思います。 それでも解決ができない場合、最小限のjsonファイルを提示した上で、質問するとよろしいかと思います。
jajajajan

2019/11/11 13:34

ありがとうございます! ご指摘通り、jsonファイルの方に不備が見つかりました コメントアウト部分の削除でjsonの方の問題は解決したと思い込んでおり、盲点でした よろしければベストアンサーにさせていただき、解決の処理をさせていただきたいので、回答の方に投稿していただけますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問