Как использовать модуль JSON в Python

JSON (JavaScript Object Notation) - популярный, облегченный стандарт обмена данными. Он представляет структуры данных, состоящие из пар ключ-значение, что является достаточно простым и понятным для человека языком.

JSON стал отраслевым стандартом для обмена данными между онлайн-сервисами. Он широко используется в современных языках программирования, включая Python.

JSON-данные часто выражаются в виде вложенных словарей, списков и скалярных значений, таких как тексты, числа, булевы и null. Они называются JSON, поскольку близко имитируют синтаксис, используемый в объектах JavaScript.

В этом уроке вы познакомитесь с модулем JSON в Python и научитесь эффективно работать с данными JSON.

Встроенный модуль JSON в Python

JSON играет важную роль в программировании на Python, поскольку позволяет эффективно осуществлять сериализацию и десериализацию данных. С его помощью программы на языке Python могут легко взаимодействовать с веб-сервисами, обмениваться данными и хранить структурированную информацию.

Разработчики могут использовать JSON для бесшовной связи своих программ на Python с различными API, базами данных и внешними системами, использующими JSON для представления данных.

Если вы хотите научиться взаимодействовать с веб-сервисами с помощью Python, ознакомьтесь с руководством по модулю requests.

Встроенный в Python модуль JSON предоставляет мощный набор методов и классов, упрощающих работу с данными JSON. Разработчики могут использовать его для кодирования объектов Python в строки JSON и декодирования строк JSON обратно в объекты Python.

Как хранить JSON-данные в файле

При работе с JSON-данными в Python часто возникает необходимость сохранить данные или поделиться ими с другими пользователями. Хранение JSON-данных в файле позволяет быстро находить и сохранять данные.

В этом разделе вы узнаете, как использовать функцию Python json.dump() для сохранения JSON-данных в файл. Этот процесс включает в себя сериализацию JSON-данных и сохранение их в файл, который впоследствии можно читать и использовать по мере необходимости.

Функция json.dump()

Функция json.dump() в Python позволяет сохранять JSON-данные непосредственно в файл. Эта функция принимает два параметра: сериализуемые данные и объект файла, в который эти данные будут записаны.

Для записи JSON-данных в файл необходимо выполнить несколько шагов. Во-первых, необходимо открыть файл в режиме записи, указав путь к файлу. Затем с помощью функции json.dump() можно сериализовать данные и записать их в файл. Наконец, необходимо закрыть файл, чтобы убедиться, что все данные сохранены должным образом.

Давайте научимся хранить данные в файле на примере ответа API гороскопа.

Предположим, что вы сделали GET-запрос к следующему URL: https://horoscope-app-api.vercel.app/api/v1/get-horoscope/daily?sign=capricorn&day=today, который предоставляет ежедневный гороскоп для знака Козерог.

import requests
import json

# Make the GET request to the horoscope API
response = requests.get("https://horoscope-app-api.vercel.app/api/v1/get-horoscope/daily?sign=capricorn&day=today")
data = response.json()  # Convert the response to JSON

# Store the JSON data in a file
with open("horoscope_data.json", "w") as file:
    json.dump(data, file)

print("Data stored successfully!")

В приведенном выше коде с помощью библиотеки requests выполняется GET-запрос к API Horoscope API. Затем из ответа извлекаются данные в формате JSON с помощью метода .json(). Наконец, с помощью оператора with открывается файл с именем horoscope_data.json в режиме записи, а для хранения данных в файле используется json.dump().

Если открыть файл horoscope_data.json, то можно увидеть содержимое, аналогичное приведенному ниже:

{
  "data": {
    "date": "Jun 3, 2023",
    "horoscope_data": "The forecast today is stormy. You may have sensed that there was some tension clouding the conversation at home. Resentments were left unsaid and subtle power games were played without resolution. Today, Capricorn, it all becomes too unbearable for you. Regardless of the risks involved, you will take measures to clear things up."
  },
  "status": 200,
  "success": true
}

Как получить данные из JSON-файла

Часто возникает необходимость чтения данных из JSON-файла. Например, необходимо считать параметры конфигурации из JSON-файла. Модуль JSON языка Python предоставляет функцию json.load(), которая позволяет читать и десериализовывать JSON-данные из файла.

В этом разделе вы узнаете, как использовать функцию json.load() для получения JSON-данных из файла и работы с ними в программах на Python.

Функция json.load()

Функция json.load() принимает в качестве аргумента объект файла и возвращает десериализованные JSON-данные в виде объектов Python, таких как словари, списки, строки, числа, булевы и нулевые значения.

Для чтения JSON-данных из файла необходимо открыть файл в режиме чтения, извлечь данные с помощью функции json.load() и сохранить их в переменной для дальнейшей обработки. Важно убедиться, что считываемый файл содержит корректные JSON-данные - в противном случае может возникнуть исключение.

Рассмотрим, как можно извлечь данные из ранее созданного horoscope_data.json файла:

import json

# Retrieve JSON data from the file
with open("horoscope_data.json", "r") as file:
    data = json.load(file)

# Access and process the retrieved JSON data
date = data["data"]["date"]
horoscope_data = data["data"]["horoscope_data"]

# Print the retrieved data
print(f"Horoscope for date {date}: {horoscope_data}")

В приведенном выше коде вы открываете файл horoscope_data.json в режиме чтения с помощью оператора with. Затем с помощью функции json.load() выполняется десериализация JSON-данных из файла в переменную data. Наконец, осуществляется доступ к определенным полям JSON-данных (например, "date" и "horoscope_data") и их обработка по мере необходимости.

Как отформатировать вывод JSON

При чтении данных из JSON-файла и их печати вывод осуществляется в виде одной строки, что может не совпадать со структурированным форматом JSON.

import json

# Retrieve JSON data from the file
with open("horoscope_data.json", "r") as file:
    data = json.load(file)

print(data)

Выход:

{'data': {'date': 'Jun 3, 2023', 'horoscope_data': 'The forecast today is stormy. You may have sensed that there was some tension clouding the conversation at home. Resentments were left unsaid and subtle power games were played without resolution. Today, Capricorn, it all becomes too unbearable for you. Regardless of the risks involved, you will take measures to clear things up.'}, 'status': 200, 'success': True}

Функция json.dumps()

Модуль JSON предоставляет функцию json.dumps() для сериализации объектов Python в строку формата JSON. Он предоставляет различные возможности для настройки, включая форматирование вывода, чтобы сделать его более удобным для восприятия человеком.

Функция json.dumps() предоставляет несколько опций для настройки вывода. Наиболее часто используемой является indent, которая позволяет указать количество пробелов, используемых для отступа.

import json

# Retrieve JSON data from the file
with open("horoscope_data.json", "r") as file:
    data = json.load(file)

# Format the data
formatted_data = json.dumps(data, indent=2)

print(formatted_data)

Выход:

{
  "data": {
    "date": "Jun 3, 2023",
    "horoscope_data": "The forecast today is stormy. You may have sensed that there was some tension clouding the conversation at home. Resentments were left unsaid and subtle power games were played without resolution. Today, Capricorn, it all becomes too unbearable for you. Regardless of the risks involved, you will take measures to clear things up."
  },
  "status": 200,
  "success": true
}

Как видно, теперь JSON-данные отформатированы с правильными отступами, что повышает их читабельность. Эта техника может быть применена к любым JSON-данным, позволяя представить JSON-вывод в более организованном и визуально привлекательном виде.

Инструмент командной строки json.tool

Модуль

Python JSON предоставляет удобный инструмент командной строки json.tool, позволяющий форматировать и красиво распечатывать JSON-данные непосредственно из командной строки. Это полезная утилита для быстрой визуализации структуры и содержимого JSON-данных в более удобном для чтения и организованном формате.

Для использования json.tool можно выполнить следующую команду в интерфейсе командной строки:

python -m json.tool <input_file> <output_file>

где:

  • python -m json.tool вызывает модуль json.tool с помощью интерпретатора Python.
  • <input_file> представляет собой путь к файлу JSON, который необходимо отформатировать.
  • <output_file> - необязательный аргумент, указывающий файл, в который следует сохранить отформатированный JSON-вывод. Если этот аргумент не указан, то отформатированный вывод будет выведен на консоль.

Допустим, у вас есть файл horoscope_data.json со следующим содержимым:

{
  "data": {
    "date": "Jun 3, 2023",
    "horoscope_data": "The forecast today is stormy. You may have sensed that there was some tension clouding the conversation at home. Resentments were left unsaid and subtle power games were played without resolution. Today, Capricorn, it all becomes too unbearable for you. Regardless of the risks involved, you will take measures to clear things up."
  },
  "status": 200,
  "success": true
}

Обратите внимание, что в приведенном JSON-файле отступ составляет два пробела.

Чтобы красиво распечатать этот JSON-файл с помощью json.tool, можно выполнить следующую команду:

python -m json.tool horoscope_data.json

На выходе получится:

{
    "data": {
        "date": "Jun 3, 2023",
        "horoscope_data": "The forecast today is stormy. You may have sensed that there was some tension clouding the conversation at home. Resentments were left unsaid and subtle power games were played without resolution. Today, Capricorn, it all becomes too unbearable for you. Regardless of the risks involved, you will take measures to clear things up."
    },
    "status": 200,
    "success": true
}

Как видно из примера, выполнение модуля json.tool с указанием пути к входному файлу форматирует JSON-данные и выводит отформатированный вывод на консоль.

Вы также можете перенаправить отформатированный вывод в выходной файл, указав в качестве второго аргумента имя выходного файла:

python -m json.tool horoscope_data.json formatted_data.json

Эта команда форматирует JSON-данные из horoscope_data.json и сохраняет отформатированный вывод в formatted_data.json.

JSON-кодирование пользовательских объектов

Модуль JSON в Python позволяет кодировать и декодировать пользовательские объекты с помощью классов JSON encoder и decoder. С помощью этих классов можно определить пользовательскую логику сериализации и десериализации для своих объектов.

Класс

JSONEncoder позволяет настраивать процесс кодирования. Чтобы определить, каким образом пользовательский объект должен быть закодирован в формат JSON, можно расширить JSONEncoder и изменить его метод default.

Вот пример того, как можно расширить класс JSONEncoder и настроить процесс кодирования для пользовательского объекта:

import json


class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age


class PersonEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, Person):
            return {"name": obj.name, "age": obj.age}
        return super().default(obj)


# Create a custom object
person = Person("Ashutosh Krishna", 23)

# Encode the custom object using the custom encoder
json_str = json.dumps(person, cls=PersonEncoder)

# Print the encoded JSON string
print(json_str)

В данном примере определяется пользовательский класс Person с атрибутами name и age. Затем создается подкласс JSONEncoder с именем PersonEncoder и переопределяется его метод default. В методе default проверяется, является ли кодируемый объект экземпляром Person. Если это так, то вы предоставляете JSON-сериализуемое представление объекта, возвращая словарь, содержащий атрибуты name и age. Если объект не относится к типу Person, то для работы с другими типами вызывается метод default суперкласса.

Используя json.dumps и указав в качестве параметра cls свой класс кодировщика PersonEncoder, можно закодировать объект person в строку JSON. На выходе получится:

{"name": "Ashutosh Krishna", "age": 23}

Аналогичным образом можно задать пользовательскую логику декодирования в классе JSON-декодера, JSONDecoder. Чтобы определить, как JSON-данные должны быть декодированы в ваш пользовательский объект, расширьте класс JSONDecoder и переопределите его функцию object_hook.

Как создать JSON из словаря Python

Для создания JSON из Python-словаря можно использовать функцию json.dumps(), предоставляемую модулем JSON. Эта функция принимает объект Python, обычно словарь, и преобразует его в строковое представление JSON.

import json

# Python dictionary
data = {
    "name": "Ashutosh Krishna",
    "age": 23,
    "email": "ashutosh@example.com"
}

# Convert dictionary to JSON string
json_str = json.dumps(data)

# Print the JSON string
print(json_str)

В данном примере имеется словарь Python data, представляющий некоторые данные. Вызов json.dumps(data) преобразует словарь в строку JSON. На выходе получится:

{"name": "Ashutosh Krishna", "age": 23, "email": "ashutosh@example.com"}

Как создать словарь Python из JSON

Для создания словаря Python из данных JSON можно воспользоваться функцией json.loads(), предоставляемой модулем JSON. Эта функция принимает строку JSON и преобразует ее в соответствующий объект Python, обычно в словарь.

import json

# JSON string
json_str = '{"name": "Ashutosh Krishna", "age": 23, "email": "ashutosh@example.com"}'

# Convert JSON string to Python dictionary
data = json.loads(json_str)

# Access the dictionary values
print(data["name"])
print(data["age"])
print(data["email"])

В данном примере имеется JSON-строка json_str, представляющая собой некоторые данные. Вызов json.loads(json_str) преобразует строку JSON в словарь Python. Затем можно получить доступ к значениям в словаре, используя соответствующие ключи.

На выходе получится:

Ashutosh Krishna
23
ashutosh@example.com

Завершение работы

Понимание модуля Python JSON необходимо для работы с данными в формате JSON, поскольку он широко используется для обмена и хранения данных в различных приложениях.

Вы сможете эффективно работать с данными JSON, взаимодействовать с API и работать с конфигурационными файлами, если научитесь использовать модуль JSON.

Вернуться на верх