2013-09-17 5 views
0
a1='[{"v1":"value"}, {"v1":"value"}, ]' 
b1=json.loads(a1) 

Создает исключения, НО.Python string to json

a2='[{"v1":"value"}, {"v1":"value"}]' 
b2=json.loads(a2) 

Не создает никаких исключений/ошибок. Может кто-то, пожалуйста, помогите мне понять, почему последняя запятая в первом примере такая большая проблема, и

как я мог бы преобразовать первый пример без изменения данных?

+1

Первый пример не является допустимым синтаксисом JSON. Вы не можете разобрать его с помощью парсера JSON, который соответствует стандарту. Решение Quick'n'dirty: запустите его через '' eval'' Python вместо '' json.loads''. – fjarri

+0

Вы действительно должны спросить, почему данные в 1 не чисты. Если вы потребляете веб-сервис, почему вы не отправляете правильный json и т. Д. После того, как вы установили, что можете посмотреть на различные методы его очистки, включая комментарий выше – dusual

ответ

1

JSON syntax не позволяет терминальные запятые, так что синтаксический анализатор правильно отвергая его.

В качестве боковой заметки этот синтаксис недействителен Javascript. Некоторые браузеры согласятся с этим, но они действуют вне стандарта при этом.

+0

Спасибо. Я получаю этот тип JSON обратно из моего бэкэнда, и я просто хотел убедиться, что я все еще могу работать с ним. Не знаю, как я могу без фактического изменения данных (удалив последнюю запятую). – Khan

1

Это потому, что ваш a1 JSON недействительна, чтобы быть с:

От JSONLint:

Parse error on line 7: 
..."value" }, ] 
--------------------^ 
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[' 

А2 JSON является допустимым, следовательно, не исключение.

EDIT:

«быстрый малоэффективный» решение Bogdan в комментариях позволит отключить исключение при сохранении того же кода