python: есть ли более сильная версия json, кроме встроенной - PullRequest
1 голос
/ 15 сентября 2010

Я использую встроенный json для Python 2.6.У меня куча проблем при разборе jsons, например:

{
 name: 'some name'
 value: 'some value'
}

Я нашел две причины -

  1. ' не работаетВам нужно "
  2. ключи словаря должны быть строками.Т.е. "name" / "value"

Я что-то упустил?Есть ли способ разобрать словарь такого типа с помощью пакета json?Есть ли какой-нибудь другой пакет Python, который может разобрать это?

Спасибо

Ответы [ 3 ]

4 голосов
/ 15 сентября 2010

Я думаю, что вам нужен не "более сильный" парсер, а сломанный парсер, который будет анализировать испорченный код. См стандарт

в частности,

  • Ключи объекта определены как строки

  • Строки определены как "" или "символы", где символы имеют довольно очевидное значение

В Интернете есть место, где вы можете посмотреть, как Дуглас Крокфорд делает полуразумные замечания о том, почему это так. Это связано с совместимостью с не-JavaScript языками. В частности, вы не могли бы иметь

{name :'some name', value: 'some value'} 

как диктант в python, если name и some value, где уже существуют, хешируемые переменные;

Сломанные парсеры вообще плохие. Достаточно взглянуть на беспорядок, который создали разбитые парсеры HTML в браузерах, где любой идиот может создать веб-сайт. Тот чувак, который написал все эти RFC, ошибся: лучше быть строгим в том, что вы излучаете и в том, что вы принимаете.

2 голосов
/ 15 сентября 2010

Проблема не в модуле Python, а в вашей строке, которая может быть любой, что вы говорите, но не JSON, поэтому она не может быть проанализирована синтаксическим анализатором JSON.

Если это был JSONэто будет выглядеть так:

{"name":"some name", "value":"some value"}

Итак, это не проблема с модулем Python.Это все равно что просить «более сильный компилятор python», потому что C-Python не может анализировать:

using json
json.loads(my_string)

Очевидно, что первая строка просто , а не Python , поэтому мы не можем попросить Python интерпретировать ее,

Теперь, если вы хотите проанализировать эту строку, я рекомендую вам либо: сделать ее строкой JSON, либо использовать Pyparsing для написания быстрого и грязного синтаксического анализатора (я гарантирую, что он будет отлично работать за меньшее времячем, скажем, 50 строк).

Ура,

Хуан.

0 голосов
/ 15 сентября 2010

Есть:

  • simplejson , который "является поддерживаемой извне версией разработки библиотеки json, включенной в Python 2.6 и Python 3.0, но поддерживает обратную совместимость с Python 2.5."
  • cjson

(Не уверен, что они разберут сломанный JSON.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...