Преобразование JSON в словарь Python

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

К концу этого урока вы узнаете:

  • Как загрузить файл JSON в словарь Python

  • Как загрузить строку JSON в словарь

  • Как загрузить данные из API в словарь Python

Оглавление

Что такое JSON?

JSON означает JavaScript Object Notation и это популярный формат для представления данных. Хотя он возник в JavaScript, формат быстро распространился благодаря своей универсальности. Сам формат очень похож на словарь в Python. Однако во многих случаях данные представлены строкой, представляющей объект. Нам нужно преобразовать эту строку в словарь Python, чтобы работать с ней в Python.

Использование JSON с Python

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

  • json.load(), который загружает файл JSON в словарь Python

  • json.loads(), который загружает строковое представление JSON файла в словарь Python

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

Загрузите файл JSON в словарь Python

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

Давайте посмотрим, как можно использовать функцию load() для загрузки внешнего JSON файла:

import json

# Загрузка файла JSON в словарь Python
with open('/Users/nikpi/Desktop/iss-now.json', 'r') as file:
    data = json.load(file)

print(data)

# Выводит:
# {'message': 'success', 'iss_position': {'latitude': '41.8157', 'longitude': '-138.3051'}, 'timestamp': 1652700632}

Давайте разберем, что мы сделали в коде выше:

  1. Мы загрузили библиотеку json

  2. Мы использовали менеджер контекста для загрузки нашего файла в режиме чтения, используя псевдоним file

  3. Затем мы использовали функцию json.load(), чтобы загрузить наш файл в переменную data

  4. Наконец, мы напечатали наш результирующий словарь

Хотя вы можете сделать это без использования менеджера контекста, менеджер контекста обрабатывает закрытие файла, тем самым сохраняя память.

Мы можем проверить тип полученного значения, используя функцию type(). Это позволяет нам убедиться, что мы действительно загрузили словарь:

# Checking the Type of Our Loaded Dictionary
import json

with open('/Users/nikpi/Desktop/iss-now.json', 'r') as file:
    data = json.load(file)

print(type(data))

# Returns:
# <class 'dict'>

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

Загрузите строку JSON в словарь Python

Во многих случаях вам будут предоставлены данные JSON в строковом формате. Работа с ними отличается от работы с файлом .json. При работе с строковыми представлениями файла JSON можно использовать функцию json.loads(), которая используется для "загрузки строки"

Давайте посмотрим, как это можно сделать на Python с использованием модуля json

# Loading a JSON String into a Python Dictionary
import json

json_data = '''
{
  "message": "success",
  "iss_position": {
    "latitude": "41.8157",
    "longitude": "-138.3051"
  },
  "timestamp": 1652700632
}
'''

data = json.loads(json_data)

print(data)

# Returns:
# {'message': 'success', 'iss_position': {'latitude': '41.8157', 'longitude': '-138.3051'}, 'timestamp': 1652700632}

Мы видим из приведенного выше примера, что путем передачи строки в функцию json.loads(), мы смогли легко преобразовать JSON-строку в словарь Python. В заключительном разделе ниже вы узнаете, как использовать функцию json.loads(), чтобы загрузить объект JSON-ответа из веб API в словарь Python.

Загрузите данные JSON из API в словарь Python

В этом разделе вы узнаете, как использовать библиотеки json и requests для получения данных из веб-API и загрузки их в словарь Python. Для этого мы будем использовать API NASA, который описывает текущее состояние Международной космической станции. Вы можете найти его здесь. Мы будем использовать конечную точку iss-now, которая предоставляет текущее местоположение.

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

# Loading JSON Data from a Web API into a Python Dictionary
import json
import requests

url = 'http://api.open-notify.org/iss-now.json'
response = requests.get(url)
text = response.text

print(json.loads(text))

# Returns:
# {'message': 'success', 'iss_position': {'latitude': '-51.2011', 'longitude': '-74.2051'}, 'timestamp': 1652719740}

Давайте разберем, что мы сделали здесь:

  1. Мы импортировали необходимые библиотеки: json и requests

  2. Мы загрузили переменную response с помощью функции requests.get(), передав наш url

  3. Затем мы получили текстовое представление из объекта response

  4. Наконец, мы передали это в функцию json.loads(), чтобы преобразовать строку в словарь

Это достаточно много кода, и, к счастью, есть более простой способ! **Библиотека requests позволяет нам применять метод .json() к объекту ответа, чтобы преобразовать его в словарь

Давайте посмотрим, как это работает:

# Convert an API JSON Response to a Python Dictionary
import requests

url = 'http://api.open-notify.org/iss-now.json'
response = requests.get(url)
data = response.json()

print(data)

# Returns:
# {'message': 'success', 'iss_position': {'latitude': '-45.0692', 'longitude': '-47.9368'}, 'timestamp': 1652720039}

В приведённом выше примере нам не нужно было импортировать библиотеку json, чтобы преобразовать строку в словарь Python. Это происходит, когда мы загружаем объект response с помощью функции .get(). Затем мы применяем метод .json() к объекту ответа, чтобы преобразовать его в словарь Python.

Заключение

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

Работа с данными в формате JSON – важный навык, учитывая его повсеместное распространение. Умение конвертировать этот формат в словарь Python поможет вам в веб-разработке и data science.

Дополнительные ресурсы

Чтобы узнать больше по смежным темам, ознакомьтесь с руководствами ниже:

  • Словари Python: полный обзор

  • Python: красивая печать JSON (3 разных способа!)

  • Python: Pretty Print a Dict (словарь) – 4 способа

Last updated