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

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

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

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

21219閲覧

Pythonでjsonデータを読み込みたいがエラーが出る

TanakashiXr

総合スコア57

JSON

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

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/11/20 10:47

編集2018/11/20 10:48

前提・実現したいこと

clMIDのタイトルをしたJSONデータを読み込みたいのですが、それが存在しない場合は新規データを作成してからデータを読み込むというプログラムを書いています。
ですが、エラーが出てしまいます。

発生している問題・エラーメッセージ

Traceback (most recent call last): File "yuuryou_hanbo.py", line 31, in <module> Setmain = json.load(Setbot) File "/root/.pyenv/versions/3.5.0/lib/python3.5/json/__init__.py", line 268, in load parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) File "/root/.pyenv/versions/3.5.0/lib/python3.5/json/__init__.py", line 319, in loads return _default_decoder.decode(s) File "/root/.pyenv/versions/3.5.0/lib/python3.5/json/decoder.py", line 339, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/root/.pyenv/versions/3.5.0/lib/python3.5/json/decoder.py", line 355, in raw_decode obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

該当のソースコード

Python

1clMID = cl.profile.mid 2 3 4wait = { 5 'autojoin':{}, 6 'autoleave':{}, 7 'autoadd':{}, 8 'autoread':{}, 9 } 10 11try: 12 setting = '%s.json'%clMID 13 Setbot = open(setting) 14 Setmain = json.load(Setbot) 15except FileNotFoundError: #設定ファイルがなかった場合 16 with open(setting, mode='w'): 17 pass 18 Setbot = open(setting) 19 Setmain = json.load(Setbot)

どうすればこのエラーを回避できますでしょうか。
また今回の件、以外にもこのプログラムの書き方で間違っている点ございましたら、教えていただけると幸いです。

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

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

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

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

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

can110

2018/11/20 12:05

「'」(シングルクォート)「"」ダブルクォートが含まれているかを知りたいので、エラー発生時のJSONファイル内容を追記ください。
TanakashiXr

2018/11/20 12:39

JSONファイル内は空白ひとつのみです
can110

2018/11/20 12:43

「Setmain = json.load(Setbot)」は2つありますが、どちらでエラー発生していますか?
can110

2018/11/20 12:48

エラーが再現できません。「空白ひとつのみ」がよく分からないので、ファイル内容をコードブロックで囲み、そのまま追記ください。
guest

回答3

0

ベストアンサー

問題はプログラムではなく、JSONファイル側にあります。

http://watanabeyu.blogspot.com/2014/10/pythonjsonjson.html

JSONファイルにコメントが存在すると、当該エラーがでるようです。

投稿2018/11/20 10:53

kazto

総合スコア7196

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

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

TanakashiXr

2018/11/20 11:45

JSONファイルにコメントは一切使用しておりません。。。
guest

0

clMID = cl.profile.mid wait = { "autojoin":{}, "autoleave":{}, "autoadd":{}, "autoread":{}, } try: setting = '%s.json'%clMID Setbot = open(setting) Setmain = json.load(Setbot) except FileNotFoundError: #設定ファイルがなかった場合 with open(setting, mode='w') as f: json.dump(wait, f, indent=4) Setbot = open(setting) Setmain = json.load(Setbot)

上記のようにすることでインデントがそろえられ、エラー出ることなくできました。

投稿2018/11/20 13:45

TanakashiXr

総合スコア57

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

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

0

Expecting property name enclosed in double quotes
と書いてある通りだと思いますが読んでないのでしょうか?

{が来た時、次に来るべきはプロパティ名なので"という文字なのに、そうなってないだけだと思います。
例えば{'hoge':1}などはJSONとして不適切です。(と同時にPythonのコードとしては適切)

plain

1In [1]: import json 2 3In [2]: json.loads("""{'hoge':1}""") 4--------------------------------------------------------------------------- 5JSONDecodeError Traceback (most recent call last) 6<ipython-input-2-a651d9dacbad> in <module> 7----> 1 json.loads("""{'hoge':1}""") 8 9~/.pyenv/versions/3.6.7/Python.framework/Versions/3.6/lib/python3.6/json/__init__.py in loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw) 10 352 parse_int is None and parse_float is None and 11 353 parse_constant is None and object_pairs_hook is None and not kw): 12--> 354 return _default_decoder.decode(s) 13 355 if cls is None: 14 356 cls = JSONDecoder 15 16~/.pyenv/versions/3.6.7/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py in decode(self, s, _w) 17 337 18 338 """ 19--> 339 obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 20 340 end = _w(s, end).end() 21 341 if end != len(s): 22 23~/.pyenv/versions/3.6.7/Python.framework/Versions/3.6/lib/python3.6/json/decoder.py in raw_decode(self, s, idx) 24 353 """ 25 354 try: 26--> 355 obj, end = self.scan_once(s, idx) 27 356 except StopIteration as err: 28 357 raise JSONDecodeError("Expecting value", s, err.value) from None 29 30JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

この通り。

投稿2018/11/20 12:34

編集2018/11/20 12:35
quickquip

総合スコア11038

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問