В этом руководстве показано, как легко использовать язык программирования Python для работы с данными JSON.
Прежде чем я начну тему, давайте кратко определим, что мы подразумеваем под JSON . Давайте посмотрим, как это определяет главный сайт JSON:
JSON (JavaScript Object Notation) — это легкий формат обмена данными. Людям легко читать и писать. Машины легко разбираются и генерируются. Он основан на подмножестве языка программирования JavaScript , стандарт ECMA-262, 3-е издание, декабрь 1999 года . JSON — это текстовый формат, полностью независимый от языка, но использующий соглашения, знакомые программистам языков семейства C, включая C, C ++, C #, Java, JavaScript, Perl, Python и многие другие. Эти свойства делают JSON идеальным языком обмена данными.
Таким образом, JSON — это простой способ создания и хранения структур данных в JavaScript. Причина, по которой вы видите JavaScript в аббревиатуре, связана с тем, что при хранении данных в JSON создается объект JavaScript. Но, не волнуйтесь, вам не нужно знать JavaScript для работы с файлами JSON, скорее речь идет о самом синтаксисе (формате) JSON.
Вкратце, JSON — это способ, которым мы храним и обмениваемся данными, что достигается с помощью его синтаксиса и используется во многих веб-приложениях. Хорошая особенность JSON заключается в том, что он имеет удобочитаемый формат, и это может быть одной из причин его использования при передаче данных в дополнение к его эффективности при работе с API .
Пример данных в формате JSON:
1
2
|
{«name»: «Frank», «age»: 39,
«isEmployed»: true}
|
В этом уроке я покажу вам, как использовать Python для работы с файлами JSON. Итак, начнем!
Python и JSON
Python упрощает работу с файлами JSON. Модуль, используемый для этой цели, является модулем json
. Этот модуль должен быть включен (встроен) в вашу установку Python, поэтому вам не нужно устанавливать какие-либо внешние модули, как, например, мы работали с файлами PDF и Excel . Единственное, что вам нужно для использования этого модуля, это импортировать его:
import json
Но что делает библиотека json
? Эта библиотека в основном анализирует JSON из файлов или строк. Он также анализирует JSON в словарь или список в Python и наоборот, то есть преобразует словарь или список Python в строки JSON.
JSON в Python
Чтение JSON означает преобразование JSON в значение (объект) Python. Как упоминалось выше, библиотека json
анализирует JSON в словарь или список в Python. Для этого мы используем функцию load loads()
(загрузка из строки) следующим образом:
1
2
3
|
import json
jsonData = ‘{«name»: «Frank», «age»: 39}’
jsonToPython = json.loads(jsonData)
|
Если вы хотите увидеть вывод, выполните print jsonToPython
, и в этом случае вы получите следующий вывод:
{u'age': 39, u'name': u'Frank'}
То есть данные возвращаются как словарь Python (структура данных объекта JSON). Итак, будет ли оператор print jsonToPython['name']
возвращать какой-либо вывод? Давай, попробуй.
Python в JSON
В предыдущем разделе мы увидели, как преобразовать JSON в значение Python (т.е. словарь). В этом разделе я покажу вам, как мы можем преобразовать (кодировать) значение Python в JSON.
Скажем, у нас есть следующий словарь в Python:
1
2
3
|
import json
pythonDictionary = {‘name’:’Bob’, ‘age’:44, ‘isEmployed’:True}
dictionaryToJson = json.dumps(pythonDictionary)
|
Если мы print dictionaryToJson
, мы получим следующие данные JSON:
{"age": 44, "isEmployed": true, "name": "Bob"}
Таким образом, этот вывод считается представлением данных объекта (словарь). Метод dumps()
был ключом к такой операции.
На этом этапе важно отметить, что JSON не может хранить все типы объектов Python, а только следующие типы: Lists; Словари; Булевы; Числа; Символьные строки; и нет. Таким образом, любые другие типы должны быть преобразованы для хранения в JSON.
Допустим, у нас есть следующий класс :
1
2
3
|
class Employee(object):
def __init__(self, name):
self.name = name
|
Допустим, мы создали новый объект abder
следующим образом:
abder = Employee('Abder')
Что если мы хотим преобразовать этот объект в JSON? Это json.dumps(abder)
? В этом случае вы получите ошибку, подобную следующей:
01
02
03
04
05
06
07
08
09
10
11
12
|
Traceback (most recent call last):
File «test.py», line 8, in <module>
abderJson = json.dumps(abder)
File «/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py», line 243, in dumps
return _default_encoder.encode(obj)
File «/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py», line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File «/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py», line 270, in iterencode
return _iterencode(o, 0)
File «/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py», line 184, in default
raise TypeError(repr(o) + » is not JSON serializable»)
TypeError: <__main__.Employee object at 0x10e74b750> is not JSON serializable
|
Но есть ли обходной путь? К счастью, есть. Мне нравится обходной путь, описанный на сайте Python Tips . Чтобы решить эту проблему, мы можем определить метод, подобный следующему:
1
2
|
def jsonDefault(object):
return object.__dict__
|
Затем закодируйте объект в JSON следующим образом:
jsonAbder = json.dumps(abder, default=jsonDefault)
Если вы print jsonAbder
, вы должны получить следующий вывод:
{"name": "Abder"}
Теперь мы закодировали объект Python ( abder
) в JSON.
Вывод
Из этого урока мы можем заметить, что Python снова и снова доказывает не только свою способность работать с различными приложениями, но также и его гибкость для работы с различными проблемами при работе с приложением, как мы видели в последней части урока.
Если вы хотите узнать больше о модуле json
, вы можете посетить страницу документации .
Изучите JavaScript: полное руководство
Мы создали полное руководство, которое поможет вам изучить JavaScript , независимо от того, начинаете ли вы как веб-разработчик или хотите изучать более сложные темы.
Выучить питон
Изучите Python с нашим полным руководством по питону, независимо от того, начинаете ли вы или начинающий программист, ищущий новые навыки.