JSONオブジェクトをPython dict
に解析しようとしています。これは今まで一度もしませんでした。この特定のエラーをグーグルで調べたとき、(最初の文字の何が問題になっていますか?)、他の投稿では、読み込まれている文字列は実際にはJSON文字列ではないと述べています。
この場合、eval()
は正常に機能しますが、もっと適切な方法があるかどうか疑問に思っていますか?
注:この文字列は、pttツールを介してTwitterから直接取得されます。
>>> import json
>>> line = '{u\'follow_request_sent\': False, u\'profile_use_background_image\': True,
u\'default_profile_image\': False,
u\'verified\': False, u\'profile_sidebar_fill_color\': u\'DDEEF6\',
u\'profile_text_color\': u\'333333\', u\'listed_count\': 0}'
>>> json.loads(line)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 1 (char 1)
それは間違いなくJSONではありません-とにかく上記のように印刷されていません。既にPythonオブジェクト-JSONにはfalse
ではなくFalse
があり、文字列はu
として表示されません]に解析されていますunicode(すべてのJSON文字列はunicodeです。json文字列をPythonチェーンのどこかで既に無料でオブジェクトに変換していて、json.loadsに読み込んでいないことを確認していますか? ()は実際には文字列ではないため、明らかに間違っていますか?
Pythonが文字列値を認識できないため、このエラーが発生することがあります。例として、この種のエラーの原因を探すのにかなりの時間を費やしました。これが私が見つけたものです。
時々、言語は別の引用符ではなく引用符を認識します:btw、JavaScriptでjsonに文字列を解析するには、すべての引用符は '形式である必要があります
javaScriptで文字列をjsonに解析するには、すべての引用符は「形式」である必要がありますが、これは実際にはロジックではありません。
置き換え機能を使用できることを願っています。 Pythonの場合:
json.loads(s.replace("\'", '"'));
このバグの追跡に費やした時間を節約できることを願っています!
プロパティのリストの末尾にコンマがぶら下がっていると、このエラーが発生しました。コンマがあるため、別のプロパティ名が必要ですが、何もありませんでした。
JSONファイルに//
で始まる行が含まれていないことを確認してください(間違ってコメントすることになっています!)。同じValueError
メッセージがありますが、//
をファイルから削除すると消えます。