2012-03-07 8 views
0

s2しかしs1があるため、私はjson.loads行うとPython文字列json.loads間difrenceでどのようなエラー

  1. s1 = '["a"]'

  2. s2 = "['a']"

、私は、次の取得エラーが罰金:

>>> s1='["a2"]' 
>>> s2="['a2']" 
>>> json.loads(s1) 
[u'a2'] 
>>> json.loads(s2) 
raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 
+0

私は 'json'に慣れていませんが、このメソッドは特定の入力文字列形式を必要としますか? – lllluuukke

+0

あなたのコードと例外情報を修正してください。あなたは 's1'を2回定義していますが、' s2'は定義していないので、例外は 'NameError'でなければなりません。あなたのコードを正確に表示するようにコードを修正してください。 – Tadeck

+1

@Ashish:あなたの質問を修正してフォーマットしました。 – Tadeck

答えて

7

問題はJSONは引用値はなく、単一のもの(')のための二重引用符(")を使用しています。

  • これは無効なJSONです:['a']
  • これは有効なJSONです:["a"]

も正しい例は、以下の異なる例外が無効なためJSONで投げていることを意味

あなたより:

>>> import json 
>>> s1 = "['a']" 
>>> s2 = '["a"]' 
>>> json.loads(s1) 
... some traceback removed ... 
ValueError: No JSON object could be decoded 
>>> json.loads(s2) 
[u'a'] 

EDIT:私は彼/彼女が投稿したものの代わりに正しい出力が表示されているはずの質問を更新しました(json.loads('["a2"]')はエラーを投げていない、json.loads("['a2']")でした)。

3

jsonの引用符は、Pythonのように入れ替えることはできません。第二の場合には"

>>> import json 
>>> print json.dumps("['a']") 
"['a']" 
>>> print json.dumps('["a"]') 
"[\"a\"]" 

をエスケープする必要

関連する問題