2012-03-07 2 views
0

Что такое difrence между:Python строковые json.loads ошибка

  1. s1 = '["a"]'

  2. s2 = "['a']"

Когда я json.loads, я получаю следующее сообщение об ошибке для s2 но s1 является штраф:

>>> 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

Исправьте код и информацию об исключении - исключение должно быть 'NameError', потому что вы определяете' s1' дважды, но вы не определяете 's2'. Пожалуйста, исправьте свой код, чтобы он точно показывал, что вы видели. – Tadeck

+1

@Ashish: Хорошо, я исправил и отформатировал ваш вопрос. – Tadeck

ответ

7

Проблема заключается в том JSON использует двойные кавычки (") для котирования значений, не единичные (').

Что означает исключение из-за недопустимого JSON:

  • это недопустимый JSON: ['a']
  • это справедливо в формате JSON: ["a"]

Также правильный пример ниже, отличается чем ваш:

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

РЕДАКТИРОВАТЬ: Я обновил вопрос с правильным выходом OP, который должен был видеть вместо того, что он опубликовал (json.loads('["a2"]') не ошибался, json.loads("['a2']") был).

3

json цитаты не взаимозаменяемы, как Python's.

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

Во втором случае " нужно экранировать

Смежные вопросы