json logo
JSON (JavaScript Object Notation) это легковесный формат обмена данными. Людям его легко читать и вести в нем записи, а компьютеры запросто справляются с его синтаксическим анализом и генерацией.
JSON основан на языке программирования JavaScript. Но этот текстовый формат не зависит от языка и среди прочих может использоваться в Python и Perl. В основном его применяют для передачи данных между сервером и веб-приложением.
JSON построен на двух структурах:
В 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-строку мы можем спарсить при помощи метода 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'}] Используя 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.
tuple_example = 'Mango', 'Banana', 'Apple' print(json.dumps(tuple_example))
["Mango", "Banana", "Apple"]
list_example = ["Mango", 1, 3, 6, "Oranges"] print(json.dumps(list_example))
["Mango", 1, 3, 6, "Oranges"]
string_example = "This is a cool example." print(json.dumps(string_example))
"This is a cool example."
boolean_value = False print(json.dumps(boolean_value))
false
Модуль 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.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 используют для загрузки файла, а json.loads – для загрузки строки (loads расшифровывается как «load string»).
Аналогично, json.dump применяется, если нужно сохранить JSON в файл, а json.dumps (dump string) – если данные JSON нам нужны в виде строки для парсинга или вывода.
Иногда при работе над проектами, связанными с 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 называется сериализацией, а декодирования – десериализацией. Некоторые реализации десериализаторов имеют ограничения на:
Впрочем, подобные ограничения связаны только с типами данных Python и работой самого интерпретатора Python.
Одно из важнейших применений 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.
Если вы ищете работу на Python, на Talanto.work сейчас есть варианты для junior, middle, senior…
Рынок Python-вакансий большой, но удобным его назвать сложно. Формально вакансий много, однако в реальном поиске…
Срезы в Python — это больше, чем a[2:7]. В статье — быстрый разбор полезных приёмов:…
В этой статье мы рассмотрим возведение в степень в Python с помощью различных методов, от…
Дубликаты в списке Python — частая проблема. В статье показано, как быстро убрать повторы, в…
Услуга виртуального хостинга на SpaceWeb позволяет арендовать часть сервера (shared-сервера) и разместить на нём свой…