Как я могу разобрать (прочитать) и использовать JSON в Python?
Моя программа на Python получает данные в формате JSON, и мне нужно извлечь из них фрагменты информации. Как я могу проанализировать данные и использовать результат? Я думаю, мне нужно использовать json.loads для этой задачи, но я не могу понять, как это сделать.
Например, предположим, что у меня есть jsonStr = '{"one" : "1", "two" : "2", "three" : "3"}'. Учитывая этот JSON и входные данные "two", как я могу получить соответствующие данные, "2"?
Помните, что .load это для файлов; .loads это для строк. Смотрите также: Чтение JSON из файла.
Иногда документ JSON предназначен для представления табличных данных. Если у вас есть что-то подобное и вы пытаетесь использовать это с Pandas, смотрите Python - Как преобразовать файл JSON в Dataframe.
Некоторые данные внешне выглядят как JSON, но не являются JSON.
Другой распространенный вариант формата помещает отдельные допустимые данные в формате JSON в каждой строке входных данных. (Правильный JSON не может быть разобран построчно, потому что в нем используются сбалансированные скобки, которые могут находиться на расстоянии многих строк друг от друга.) Этот формат называется JSONL. Смотрите раздел Загрузка файла JSONL в виде объектов JSON.
Иногда данные JSON из веб-источника дополняются дополнительным текстом. В некоторых контекстах это позволяет обойти ограничения безопасности в браузерах. Это называется JSONP и описано в Что такое JSONP и зачем он был создан?. В других контекстах дополнительный текст реализует меру безопасности, как описано в Почему Google добавляет while(1); к своим ответам в формате JSON?. В любом случае, справиться с этим в Python просто: просто определите и удалите лишний текст и действуйте, как раньше.
Переведено автоматически
Ответ 1
Очень просто:
import json data = json.loads('{"one" : "1", "two" : "2", "three" : "3"}') print(data['two']) # or `print data['two']` in Python 2
Ответ 2
Иногда ваш json не является строкой. Например, если вы получаете json из URL, подобного этому:
j = urllib2.urlopen('http://site.com/data.json')
вам нужно будет использовать json.load , а не json.loads:
j_obj = json.load(j)
(легко забыть: 's' означает 'строка')
Ответ 3
Для URL или файла используйте json.load(). Для строки с .содержимым json используйте json.loads().
#! /usr/bin/python
import json # from pprint import pprint
json_file = 'my_cube.json' cube = '1'
withopen(json_file) as json_data: data = json.load(json_data)
Обратите внимание, что вы можете установить аргумент ident для dump, чтобы печатать его следующим образом (например, при использовании print json.dumps(data , indent=4)):