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

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

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

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

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

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

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

Встроенный модуль JSON в Python предоставляет мощный набор методов и классов, упрощающих работу с данными 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-запроса к Horoscope API. Затем вы извлекаете данные JSON из ответа, используя метод .json(). Наконец, вы открываете файл с именем horoscope_data.json в режиме записи с помощью оператора with и используете json.dump() для сохранения данных в файле.

Посмотрите это руководство, чтобы узнать, как узнать свой гороскоп с помощью Python.

Если вы откроете файл 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. Модуль Python JSON предоставляет функцию 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 из файла в переменную данных. Наконец, вы получаете доступ к определенным полям данных JSON (например, «дата» и «данные гороскопа») и обрабатываете их по мере необходимости.

Форматирование вывода 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. С помощью этих классов вы можете определить пользовательскую логику сериализации и десериализации для ваших объектов.

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.dumps(), предоставляемую модулем JSON, для создания JSON из словаря Python. Эта функция берет объект Python, обычно словарь, и преобразует его в строковое представление JSON.

import json

# Python dictionary
data = {
    "name": "Ashutosh Krishna",
    "age": 23,
    "email": "[email protected]"
}

# 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": "[email protected]"}

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

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

import json

# JSON string
json_str = '{"name": "Ashutosh Krishna", "age": 23, "email": "[email protected]"}'

# 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
[email protected]

Подведение итогов

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



Первоначально опубликовано на https://blog.ashutoshkrris.in.

Дополнительные материалы на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .