Краткое руководство по использованию JSON в Python
JSON (JavaScript Object Notation) это легковесный формат обмена данными. Людям его легко читать и вести в нем записи, а компьютеры запросто справляются с его синтаксическим анализом и генерацией.
JSON основан на языке программирования JavaScript. Но этот текстовый формат не зависит от языка и среди прочих может использоваться в Python и Perl. В основном его применяют для передачи данных между сервером и веб-приложением.
JSON построен на двух структурах:
- Набор пар «имя-значение». Они могут быть реализованы как объект, запись, словарь, хеш-таблица, список «ключей-значений» или ассоциативный массив.
- Упорядоченный список значений. Его реализуют в виде массива, вектора, списка или последовательности.
JSON в Python
В Python есть ряд пакетов, поддерживающих JSON, в частности metamagic.json, jyson, simplejson, Yajl-Py, ultrajson, и json. В этом руководстве мы будем использовать json, имеющий «родную» поддержку в Python. Для проверки данных JSON мы можем воспользоваться этим сайтом, предоставляющим JSON-линтер.
Ниже приведен пример записи JSON. Как видим, представление данных очень похоже на словари Python.
{
"article": [
{
"id": "01",
"language": "JSON",
"edition": "first",
"author": "Derrick Mwiti"
},
{
"id": "02",
"language": "Python",
"edition": "second",
"author": "Derrick Mwiti"
}
],
"blog": [
{
"name": "Datacamp",
"URL": "datacamp.com"
}
]
}
Конвертируем JSON в объекты Python
Вышеуказанную JSON-строку мы можем спарсить при помощи метода json.loads() из модуля json. В итоге получим словарь Python.
import json
my_json_string = """{
"article": [
{
"id":"01",
"language": "JSON",
"edition": "first",
"author": "Derrick Mwiti"
},
{
"id":"02",
"language": "Python",
"edition": "second",
"author": "Derrick Mwiti"
}
],
"blog":[
{
"name": "Datacamp",
"URL":"datacamp.com"
}
]
}
"""
to_python = json.loads(my_json_string)
to_python['blog']
[{'URL': 'datacamp.com', 'name': 'Datacamp'}]
Конвертируем объекты Python в JSON
Используя json.dumps(), мы можем сконвертировать объекты Python в формат JSON.
blog = {'URL': 'datacamp.com', 'name': 'Datacamp'}
to_json= json.dumps(blog)
to_json
'{"URL": "datacamp.com", "name": "Datacamp"}'
Теперь давайте сравним типы данных в Python и JSON.
| Python | JSON |
| dict | Object |
| list | Array |
| tuple | Array |
| str | String |
| int | Number |
| float | Number |
| True | true |
| False | false |
| None | null |
Ниже мы покажем, как сконвертировать некоторые объекты Python в типы данных JSON.
Кортеж Python — в массив JSON
tuple_example = 'Mango', 'Banana', 'Apple' print(json.dumps(tuple_example))
["Mango", "Banana", "Apple"]
Список Python — в массив JSON
list_example = ["Mango", 1, 3, 6, "Oranges"] print(json.dumps(list_example))
["Mango", 1, 3, 6, "Oranges"]
Строка Python — в строку JSON
string_example = "This is a cool example." print(json.dumps(string_example))
"This is a cool example."
Булевы значения Python — в булевы значения JSON
boolean_value = False print(json.dumps(boolean_value))
false
Запись в файл JSON
Модуль json позволяет также записывать данные JSON в файл. Такие файлы сохраняют с расширением .json.
Давайте посмотрим, как это сделать. Для этого воспользуемся функцией open() с параметром w, сигнализирующим о том, что мы хотим записать в файл.
my_json_string = """{
"article": [
{
"id":"01",
"language": "JSON",
"edition": "first",
"author": "Derrick Mwiti"
},
{
"id":"02",
"language": "Python",
"edition": "second",
"author": "Derrick Mwiti"
}
],
"blog":[
{
"name": "Datacamp",
"URL":"datacamp.com"
}
]
}
"""
with open('test_file.json', 'w') as file:
json.dump(my_json_string, file)
Чтение файлов JSON
Теперь продемонстрируем, как прочитать только что созданный нами файл JSON. Для его загрузки вызовем json.load().
with open('test_file.json', 'r') as j:
json_data = json.load(j)
print(json_data)
{
"article": [
{
"id":"01",
"language": "JSON",
"edition": "first",
"author": "Derrick Mwiti"
},
{
"id":"02",
"language": "Python",
"edition": "second",
"author": "Derrick Mwiti"
}
],
"blog":[
{
"name": "Datacamp",
"URL":"datacamp.com"
}
]
}
json.load vs json.loads
json.load используют для загрузки файла, а json.loads – для загрузки строки (loads расшифровывается как «load string»).
json.dump vs json.dumps
Аналогично, json.dump применяется, если нужно сохранить JSON в файл, а json.dumps (dump string) – если данные JSON нам нужны в виде строки для парсинга или вывода.
Работа с данными JSON в Data Science
Иногда при работе над проектами, связанными с data science, требуется загрузить данные в формате JSON. Библиотека для анализа данных Pandas предоставляет для этого функцию .read_json. Как только данные загружены, мы конвертируем их в объект dataframe при помощи атрибута pandas.DataFrame.
import pandas as pd
data = pd.read_json("https://api.github.com/users")
df = pd.DataFrame(data)
df
Ограничения имплементации
Процесс кодирования в JSON называется сериализацией, а декодирования – десериализацией. Некоторые реализации десериализаторов имеют ограничения на:
- размер принимаемых текстов JSON
- максимальный уровень вложенности объектов и массивов JSON
- диапазон точности чисел JSON
- содержание и максимальную длину строк JSON.
Впрочем, подобные ограничения связаны только с типами данных Python и работой самого интерпретатора Python.
Формат JSON в разработке API
Одно из важнейших применений JSON – для разработки API в веб-приложениях. Этот формат очень полезен, ведь позволяет коллегам-разработчикам строить систему на основе наших API, используя любой язык, поддерживающий JSON. А такой поддержкой обладают практически все современные языки. На простом примере покажем, как вернуть JSON при разработке приложения на Python с фреймворком Flask. Flask предоставляет для этого модуль jsonify.
from flask import jsonify
@app.route('/_get_current_user')
def get_current_user():
return jsonify(username=g.user.username,
email=g.user.email,
id=g.user.id)
Эта программа отправит в браузер что-то вроде следующего:
{
"username": "Derrick Mwiti",
"email": "myemail@gmail.com",
"id": 1
}
{'email': 'myemail@gmail.com', 'id': 1, 'username': 'Derrick Mwiti'}
Заключение
В этом уроке мы сделали небольшое введение в особенности работы с JSON в Python. Рассмотрели использование различных методов из модуля json, таких как json.load и json.dumps. Кроме того, мы разобрали, как загрузить данные в формате JSON для работы в проектах data science и как возвращать JSON при разработке API. Узнать больше о модуле json можно на его официальной странице на сайте Python.
