Как разобрать неправильный JSON с помощью Python?
Я столкнулся с следующей проблемой: у меня есть JSON-строка, получаемая из внешнего источника:
{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}
Это неправильно отформатированная JSON-строка (ключи "id" и "value" должны быть в кавычках), но мне нужно ее распарсить. Я попытался использовать библиотеки simplejson и json-py, но, похоже, они не могут быть настроены для разбора таких строк.
Я использую Python 2.5 на Google App Engine, поэтому любые решения на основе C, такие как python-cjson, не подходят.
Формат входных данных может быть изменен на XML или YAML, помимо упомянутого выше JSON, но я использую JSON в проекте, и менять формат в конкретном месте не было бы лучшим решением.
В настоящее время я перешел на XML и успешно парс lege данные, но надеюсь найти решение, которое позволило бы мне вернуться к JSON.
2 ответ(ов)
Да, вы правы! Начиная с версии YAML 1.2, YAML является надмножеством JSON, что позволяет использовать формат JSON в качестве корректного YAML. Это означает, что вы можете загружать строки в формате JSON, используя библиотеку YAML.
Вот пример, как это можно сделать:
import yaml
s = '{value: "82363549923gnyh49c9djl239pjm01223", id: 17893}'
result = yaml.load(s, Loader=yaml.FullLoader)
print(result)
В результате вы получите словарь:
{'id': 17893, 'value': '82363549923gnyh49c9djl239pjm01223'}
Обратите внимание на использование Loader=yaml.FullLoader
, что является безопасной практикой при загрузке данных из внешних источников.
Вы можете использовать парсер строк для первоначальной обработки, регулярные выражения могут справиться с этим, при условии, что сложность JSON не превысит допустимые пределы.
Почему Python не может разобрать эти данные JSON? [закрыто]
Как отправить JSON-данные с помощью Python Requests?
Возврат JSON-ответа из представления Flask
Ошибка JSONDecodeError: Ожидалось значение: строка 1, столбец 1 (символ 0)
Преобразование строки даты JSON в datetime в Python