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

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

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

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

Оглавление

* [Что такое JSON?](#chto-takoe-json)
* [Использование JSON с Python](#ispolzovanie-json-s-python)
* [Загрузите файл JSON в словарь Python](#zagruzite-fail-json-v-slovar-python)
* [Загрузите строку JSON в словарь Python](#zagruzite-stroku-json-v-slovar-python)
* [Загрузите данные JSON из API в словарь Python](#zagruzite-dannye-json-iz-api-v-slovar-python)
* [Заключение](#zaklyuchenie)
* [Дополнительные ресурсы](#dopolnitelnye-resursy)

### Что такое 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**. Если вы хотите следовать инструкциям, вы можете [скачать файл здесь](https://raw.githubusercontent.com/datagy/mediumdata/master/iss-now.json). Файл представляет данные с международной космической станции, API которой мы изучим позже в этом уроке.

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

```python
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()`. Это позволяет нам убедиться, что мы действительно загрузили словарь:

```python
# 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`

```python
# 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, который описывает текущее состояние Международной космической станции. [Вы можете найти его здесь](http://open-notify.org/Open-Notify-API/ISS-Location-Now/). Мы будем использовать конечную точку `iss-now`, которая предоставляет текущее местоположение.

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

```python
# 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()` к объекту ответа, чтобы преобразовать его в словарь

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

```python
# 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 способа


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://bemind.gitbook.io/neural/python/python-dictionaries/preobrazovanie-json-v-slovar-python.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
