Как работать с JSON в Python

User Rating: 0 / 5

В этой статье мы посмотрим, как можно работать с JSON в Python, а именно сериализовать объекты в строковое представление с JSON и десериализовать обратно в объекты Python из строки, содержащей JSON. Для работы с JSON в Python существует специальный модуль json, поэтому первое, что необходимо сделать - это подключить данный модуль к вашему скрипту/модулю:

import json

Далее нашему вниманию предстают две функции этого модуля:

  • dumps - преобразует Python-объекты (списки, словари, кортежи) в строку, содержащую JSON-представление этих объектов
  • loads - выполняет действие, обратное функции dumps: эта функция десериализует JSON из строкового представления обратно в объекты Python, к которым можно обращаться и получать данные, в соответствии с их типом

Посмотрим на следующий небольшой пример, в котором мы преобразуем в строки, содержащие JSON, различные объекты: списки, словари и кортежи:

if __name__ == '__main__':
    # сериализуем в JSON-строку список, содержащий внутри себя словарь
    json1_str = json.dumps(['one', 'two', 'three', {'somekey' : ['someval1', 'someval2'] }])
    print(f'JSON-строка json1_str: {json1_str}')

    # преобразуем кортеж в JSON-строку и выводим на консоль
    json2_str = json.dumps((1, 2, 3, 4, 5))
    print(f'JSON-строка json2_str: {json2_str}')

    # используем сортировку ключей и отступы для более красивого JSON-представления
    json3_str = json.dumps({'d' : 'd_value', 'e' : 'e_value', 'a' : 'a_value'}, sort_keys=True, indent=4)
    print(f'JSON-строка json3_str: {json3_str}')

    # десериализация из JSON-строки в список, содержащий внутри себя, в частности, словарь
    json1_obj = json.loads(json1_str)
    print(f'json1_obj: {json1_obj}')
    print(f'json1_obj[0]: {json1_obj[0]}')
    print(f'json1_obj[1]: {json1_obj[1]}')
    print(f'json1_obj[2]: {json1_obj[2]}')
    print(f'json1_obj[3]: {json1_obj[3]}')
    print(f'json1_obj[3]["somekey"]: {json1_obj[3]["somekey"]}')
    print(f'json1_obj[3]["somekey"][0]: {json1_obj[3]["somekey"][0]}')
    print(f'json1_obj[3]["somekey"][1]: {json1_obj[3]["somekey"][1]}')

    # преобразуем JSON-строку в кортеж и выводим на консоль 3-й элемент кортежа
    json2_obj = json.loads(json2_str)
    print(f'json2_obj[2]: {json2_obj[2]}')

    # преобразуем JSON-строку в словарь и в цикле выводим элементы на консоль
    json3_obj = json.loads(json3_str)
    for k, v in dict(json3_obj).items():
        print(f'Итерируемся по словарю json3_obj: key = {k}, value = {v}')

Если запустить этот скрипт, то на консоль будет выведен следующий результат его работы:

JSON-строка json1_str: ["one", "two", "three", {"somekey": ["someval1", "someval2"]}]
JSON-строка json2_str: [1, 2, 3, 4, 5]
JSON-строка json3_str: {
"a": "a_value",
"d": "d_value",
"e": "e_value"
}
json1_obj: ['one', 'two', 'three', {'somekey': ['someval1', 'someval2']}]
json1_obj[0]: one
json1_obj[1]: two
json1_obj[2]: three
json1_obj[3]: {'somekey': ['someval1', 'someval2']}
json1_obj[3]["somekey"]: ['someval1', 'someval2']
json1_obj[3]["somekey"][0]: someval1
json1_obj[3]["somekey"][1]: someval2
json2_obj[2]: 3
Итерируемся по словарю json3_obj: key = a, value = a_value
Итерируемся по словарю json3_obj: key = d, value = d_value
Итерируемся по словарю json3_obj: key = e, value = e_value

Process finished with exit code 0

Обратите внимание на дополнительные параметры sort_keys и indent для функции dumps. Первый используются для того, что отсортировать в алфавитном порядке ключи словаря, к которому применяется сериализация в строку. Второй используется для того, чтобы при сериализации объектов в JSON-строку соблюдались требуемые отступы, ведь это улучшает читаемость JSON-объекта. Как видно из примера, в начале скрипта трижды вызывается функция dumps для различных объектов и результат преобразования выводится на консоль. Далее при помощи функции loads мы десериализуем из JSON-строки хранящиеся в ней объекты и обращаемся к ним соответствующим образом (по индексам или ключам, если это словарь).

Из полезных функций, которые предоставляет модуль json, можно также отметить функции dump и load. Эти функции аналогичны приведённым выше, но применяются для сериализации в файлы и десериализации JSON из файлов. 

Полную документацию по модулю json и входящим в него функциям можно найти по следующей ссылке. А на этом пока всё, удачи в применении данных функций в ваших Python-скриптах. Делитесь своим опытом работы с JSON в комментариях к статье.

 

 

Яндекс.Метрика