Рубрики
Без рубрики

Работа с JSON в Python

Описав несколько разных решений для работы с JSON в Python .. Теги с Python, Json.

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

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

Для этого поста мы собираемся использовать следующие измененные данные JSON из Астрономическая картина NASA в день API Отказ Перейдите к тому, где вы хотите запустить пример код, создайте файл под названием apod.json и добавьте следующее к нему:

{
        "copyright": "Yin Hao",
        "date": "2018-10-30",
        "explanation": "Meteors have been shooting out from the constellation of Orion...",
        "hdurl": "https://apod.nasa.gov/apod/image/1810/Orionids_Hao_2324.jpg",
        "media_type": "image",
        "service_version": "v1",
        "title": "Orionids Meteors over Inner Mongolia",
        "url": "https://apod.nasa.gov/apod/image/1810/Orionids_Hao_960.jpg"
}

Используя этот пример, давайте рассмотрим, как вы будете декодировать и кодировать эти данные с разными библиотеками Python.

Стандартная библиотека

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

Создайте файл под названием test.py и вставить следующий код в него, чтобы декодировать JSON в нашем apod.json Текстовый файл, храните его в словаре Python, а затем декодируйте его обратно в строку:

import json

with open('apod.json', 'r') as f:
        json_text = f.read()

# Decode the JSON string into a Python dictionary.
apod_dict = json.loads(json_text)
print(apod_dict['explanation'])

# Encode the Python dictionary into a JSON string.
new_json_string = json.dumps(apod_dict, indent=4)
print(new_json_string)

Запустите свой код со следующей командой:

python test.py

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

SimpleJSON

SimpleJSON это простая и быстрая библиотека JSON, которая аналогично встроенным модулем. Прохладная вещь о SimpleJSON в том, что он снаружи поддерживается и регулярно обновляется.

Вам придется установить этот модуль с PIP. Таким образом, в вашем терминале запустите следующую команду ( Предпочтительно в виртуальной среде ):

pip install simplejson==3.16.0

Эта библиотека предназначена для того, чтобы быть очень похожим на встроенный модуль, поэтому вам даже не нужно менять свой код, чтобы получить ту же функциональность! Просто импортировать SimpleJSON Модуль, дайте ему имя JSON , а остальная часть кода из предыдущего примера должна просто работать.

Замените свой предыдущий код следующим образом, если вы хотите использовать SimpleJSON для кодирования и декодирования:

import simplejson as json

with open('apod.json', 'r') as f:
        json_text = f.read()

# Decode the JSON string into a Python dictionary.
apod_dict = json.loads(json_text)
print(apod_dict['explanation'])

# Encode the Python dictionary into a JSON string.
new_json_string = json.dumps(apod_dict, indent=4)
print(new_json_string)

Опять же, запустите это со следующей командой:

python test.py

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

Ultrajson.

Как SimpleJSON, Уджсон это еще одна библиотека JSON, поддерживаемая сообществом. Этот, однако, написан в C и предназначен для того, чтобы быть Действительно быстро Отказ Его не хватает некоторых более продвинутых функций, которые встроенные в библиотеке JSON, но действительно доставляют его обещание, так как кажется, несомненно, с точки зрения скорости.

Установите UJSON со следующей командой:

pip install ujson==1.35

Как и в случае SimpleJSON, вам не нужно менять какой-либо из вашего кода для него на работу. В большинстве случаев он работает так же от точки зрения разработчика как встроенный модуль. Замените свой предыдущий код следующим образом:

import ujson as json

with open('apod.json', 'r') as f:
        json_text = f.read()

# Decode the JSON string into a Python dictionary.
apod_dict = json.loads(json_text)
print(apod_dict['explanation'])

# Encode the Python dictionary into a JSON string.
new_json_string = json.dumps(apod_dict, indent=4)
print(new_json_string)

Запустите это со следующей командой:

python test.py

Если вы имеете дело с действительно большими наборами набора данных, и JSON Serialization становится дорогой задачей, то Ujson – отличная библиотека для использования.

Библиотека запросов

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

Запросы Библиотека является самым популярным инструментом Python для создания HTTP-запросов, и он имеет довольно потрясающий встроен в JSON () Способ на объекте ответа, который возвращается, когда ваш запрос HTTP завершен. Приятно иметь встроенное решение, поэтому вам не нужно импортировать больше библиотек для простой задачи.

Установите запросы со следующей командой оболочки:

pip install requests==2.20.0

В этом примере мы фактически собираемся сделать HTTP-запрос на астрономию ASI API, а не использовать локальные жесткие кодировки .json файл с других примеров.

Откройте новый файл под названием apod.py и добавить следующий код:

import requests

apod_url = 'https://api.nasa.gov/planetary/apod?api_key=DEMO_KEY'
apod_dict = requests.get(apod_url).json()

print(apod_dict['explanation'])

Этот код делает HTTP Получить Запрос на API NASA, анализирует данные JSON, которые она возвращается с использованием этого метода, встроенной и распечатывает объяснение текущей астрономии.

Запустите свой код со следующей командой:

python apod.py

Отвечая на HTTP-запрос с JSON в колбе

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

Установите колбу с PIP:

pip install flask==1.0.2

И теперь создайте новый файл под названием app.py , где код для нашего примера веб-приложения будет жить:

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/apod', methods=['GET'])
def apod():
        url = 'https://apod.nasa.gov/apod/image/1810/Orionids_Hao_960.jpg'
        title = 'Orionids Meteors over Inner Mongolia'

        return jsonify(url=url, title=title)

if __name__ == '__main__':
        app.run()

В этом коде у нас есть маршрут с именем /апод и в любое время а Получить Запрос отправляется на этот маршрут, APOD () Функция называется. В этой функции мы претендуем, чтобы ответить на астрономию картины дня. В этом примере данные, которые мы возвращаем, просто жестко закодированы, но вы можете заменить это с помощью данных из любого другого источника.

Запустите файл с помощью Python App.py , а потом посетите http://localhost: 5000/apod В вашем браузере, чтобы увидеть данные JSON.

На колбные документы, jsonify Функция принимает данные в виде:

  1. Одиночный аргумент: проходил прямо до Дампы () Отказ
  2. Несколько аргументов: преобразуются в массив перед передачей Дампы () Отказ
  3. Множественные аргументы ключевых слов: преобразованы в акцикт перед передачей Дампы () Отказ
  4. Как args, и kwargs: поведение undefined и бросит исключение.

Эта функция обертывает Дампы () Чтобы добавить несколько улучшений, которые облегчают жизнь. Это превращает вывод JSON в Ответ Объект с приложением/JSON Mimetype.

Заключение

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

Не стесняйтесь протянуть любые вопросы или показывать то, что вы строите:

Оригинал: “https://dev.to/twilio/working-with-json-in-python-4hd1”