2016-12-25 1 views
2

私はjson1のようなJSON文字列を持っています。私はこれをJSONとして解析しようとしていますが、うまくいかないようです。何がうまくいかないのですか?json.loads()はいくつかの文字列で動作するのはなぜですか?

import json 

string1 = "[]" 
list1 = "['hi','bye']" 
json1 = "{'genre': ['Action', 'Comedy']}" 

print json.loads(string1) 
print json.loads(list1) 
print json.loads("{'genre': ['Action', 'Comedy']}") 

それは私にエラーを与える

Traceback (most recent call last): 
    File "python", line 8, in <module> 
ValueError: No JSON object could be decoded 
+1

'list1'はJSON形式 –

+2

ではありませんではない有効なJSON ...のhttp://www.json.org/は、JSON文字列は二重引用符で囲まれた'印刷json.loads(あるべき '{ "ジャンル":["アクション"、 "コメディ"]} ') – danidee

答えて

5

JSONを使用すると、単一引用符で囲まれた文字列を持って、二重引用符で囲まれた文字列を期待しています。あなたはast.literal_evalを使用して文字列を読み込むことができます。

import ast 
print(ast.literal_eval("{'genre': ['Action', 'Comedy']}")) 

結果:(JavaScriptやPythonのとは違って)

{'genre': ['Action', 'Comedy']} 
+0

すごいよ! Phew、そのような小さなディテール。ありがとう。 –

2

JSON only allows double-quoted strings。このため

>>> print json.loads('["hi","bye"]') 
[u'hi', u'bye'] 

>>> print json.loads("['hi','bye']") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads 
    return _default_decoder.decode(s) 
    File "/System/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 "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 384, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 

、およびPythonは単一 -quoted文字列を好む傾向があるため、Pythonオブジェクトのrepr()はほとんど常に無効 JSON です。代わりにjson.dumps()を使用する必要があります。彼らはだから

>>> v = ["hi", "bye"] 
>>> repr(v) 
"['hi', 'bye']" 
>>> json.dumps(v) 
'["hi", "bye"]' 
関連する問題