Мой проект в настоящее время получает сообщение JSON на python, из которого мне нужно получить информацию. Для этого давайте зададим ему простой JSON в строке:
jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}'
До сих пор я генерировал JSON-запросы, используя список, а затем json.dumps
, но чтобы сделать обратное, я думаю, что мне нужно использовать json.loads
. Однако мне не очень повезло с этим. Может ли кто-нибудь предоставить мне фрагмент, который будет возвращен "2"
с вводом "two"
в приведенном выше примере?
'
разделители строк в одинарных кавычках, вы можете случайно создать строковые представления для словарей Python. JSON всегда"
будет использовать разделители . Если так, исправьте свой код, который производит этот вывод, чтобы использоватьjson.dumps()
вместоstr()
илиrepr()
, и перейдите к Преобразовать строковое представление словаря в словарь? чтобы выяснить, как восстановить ваши данные Python. Другие подсказки у вас есть литерал Python? ИщитеNone
,True
илиFalse
, JSON будет использоватьnull
,true
&false
.'
разделителями строк в одинарных кавычках ), также могут посмотреть здесь: stackoverflow.com/questions/41168558/…Ответы:
Очень просто:
источник
import simplejson as json
. Забыл упомянуть, но спасибо :).load
метод вместо.loads
Иногда ваш JSON не является строкой. Например, если вы получаете JSON из URL-адреса, как это:
вам нужно будет использовать json.load, а не json.loads:
(легко забыть: 's' для 'строки')
источник
Для URL или файла используйте
json.load()
. Для строки с содержанием .json используйтеjson.loads()
.источник
Вот простой пример, который может вам помочь:
Выход для вышеуказанного кода будет:
Обратите внимание, что вы можете установить для идентификатора аргумента dump его печать следующим образом (например, при использовании print json.dumps (data, indent = 4)):
источник
Можно использовать модули json или ast python:
источник
ast.literal_eval()
функцию для JSON, потому что помимо ваших простых текстовых и целочисленных примеров вы столкнетесь с проблемами. JSON это не Python . Тот факт, что некоторые JSON могут быть проанализированыast.literal_eval()
, не делает это правильным подходом.r'{"foo": null, "bar": true, "baz": "\ud83e\udd26"}'
с помощьюast.literal_eval()
, потому что он содержит нули, логическое значение и одну кодовую точку, отличную от BMP. JSON представляет эти значения не так, как их представляют литералы Python.json.loads()
с другой стороны, не имеет никаких проблем с этим входом и правильно декодирует что{'foo': None, 'bar': True, 'baz': '🤦'}
.ast.literal_eval()
это немного медленнее и не может быть настроено. Вы никогда не должны использовать его для декодирования JSON .