На данный момент даны две проблемы с ответами, если, например, один передает такой нестандартный JSON. Потому что тогда, возможно, придется интерпретировать входящую строку (а не словарь Python).
Проблема 1 - demjson
: с Python 3.7. + И использованием conda мне не удалось установить demjson, поскольку он, очевидно, в настоящее время не поддерживает Python> 3.5. Поэтому мне нужно решение с более простыми средствами, например ast
и / или json.dumps
.
Проблема 2 - ast
& json.dumps
: если JSON заключен в одинарные кавычки и содержит строку как минимум в одном значении, которое, в свою очередь, содержит одинарные кавычки, единственное простое, но практическое решение, которое я нашел, - это применение обоих:
В следующем примере мы предполагаем, line
что это входящий строковый объект JSON:
>>> line = str({'abc':'008565','name':'xyz','description':'can control TV\'s and more'})
Шаг 1: преобразуйте входящую строку в словарь, используя ast.literal_eval()
Шаг 2: примените json.dumps
к нему для надежного преобразования ключей и значений, но не затрагивая содержимое значений :
>>> import ast
>>> import json
>>> print(json.dumps(ast.literal_eval(line)))
{"abc": "008565", "name": "xyz", "description": "can control TV's and more"}
json.dumps
сам по себе не справился бы с этой задачей, потому что он не интерпретирует JSON, а только видит строку. Аналогично ast.literal_eval()
: хотя он правильно интерпретирует JSON (словарь), он не преобразует то, что нам нужно.