Краткое руководство по использованию 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.