Вопрос-Ответ

How can I parse (read) and use JSON in Python?

Как я могу разобрать (прочитать) и использовать 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.

Например, иногда данные поступают в результате применения repr к собственным структурам данных Python. В результате могут использоваться кавычки по-другому, использовать True и False в заголовке вместо true и false в формате 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'

with open(json_file) as json_data:
data = json.load(json_data)

# pprint(data)

print "Dimension: ", data['cubes'][cube]['dim']
print "Measures: ", data['cubes'][cube]['meas']
Ответ 4

Ниже приведен простой пример, который может вам помочь:

json_string = """
{
"pk": 1,
"fa": "cc.ee",
"fb": {
"fc": "",
"fd_id": "12345"
}
}"""


import json
data = json.loads(json_string)
if data["fa"] == "cc.ee":
data["fb"]["new_key"] = "cc.ee was present!"

print json.dumps(data)

Результатом для приведенного выше кода будет:

{"pk": 1, "fb": {"new_key": "cc.ee was present!", "fd_id": "12345", 
"fc": ""}, "fa": "cc.ee"}

Обратите внимание, что вы можете установить аргумент ident для dump, чтобы печатать его следующим образом (например, при использовании print json.dumps(data , indent=4)):

{
"pk": 1,
"fb": {
"new_key": "cc.ee was present!",
"fd_id": "12345",
"fc": ""
},
"fa": "cc.ee"
}
2023-04-27 01:46 python json