web-dev-qa-db-ja.com

PythonでJSONを解析しようとしています。 ValueError:プロパティ名が必要です

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)
26
gabe

それは間違いなくJSONではありません-とにかく上記のように印刷されていません。既にPythonオブジェクト-JSONにはfalseではなくFalseがあり、文字列はuとして表示されません]に解析されていますunicode(すべてのJSON文字列はunicodeです。json文字列をPythonチェーンのどこかで既に無料でオブジェクトに変換していて、json.loadsに読み込んでいないことを確認していますか? ()は実際には文字列ではないため、明らかに間違っていますか?

28
Nick Bastin

Pythonが文字列値を認識できないため、このエラーが発生することがあります。例として、この種のエラーの原因を探すのにかなりの時間を費やしました。これが私が見つけたものです。

時々、言語は別の引用符ではなく引用符を認識します:btw、JavaScriptでjsonに文字列を解析するには、すべての引用符は '形式である必要があります

javaScriptで文字列をjsonに解析するには、すべての引用符は「形式」である必要がありますが、これは実際にはロジックではありません。

置き換え機能を使用できることを願っています。 Pythonの場合:

json.loads(s.replace("\'", '"'));

このバグの追跡に費やした時間を節約できることを願っています!

27
gronaz

プロパティのリストの末尾にコンマがぶら下がっていると、このエラーが発生しました。コンマがあるため、別のプロパティ名が必要ですが、何もありませんでした。

7
Ian Danforth

JSONファイルに//で始まる行が含まれていないことを確認してください(間違ってコメントすることになっています!)。同じValueErrorメッセージがありますが、//をファイルから削除すると消えます。

0
Aziz Alto