Статьи

Как работать с данными JSON с помощью Python

В этом руководстве показано, как легко использовать язык программирования 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. Модуль, используемый для этой цели, является модулем json . Этот модуль должен быть включен (встроен) в вашу установку Python, поэтому вам не нужно устанавливать какие-либо внешние модули, как, например, мы работали с файлами PDF и Excel . Единственное, что вам нужно для использования этого модуля, это импортировать его:

import json

Но что делает библиотека json ? Эта библиотека в основном анализирует JSON из файлов или строк. Он также анализирует JSON в словарь или список в Python и наоборот, то есть преобразует словарь или список Python в строки JSON.

Чтение 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'] возвращать какой-либо вывод? Давай, попробуй.

В предыдущем разделе мы увидели, как преобразовать 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 , независимо от того, начинаете ли вы как веб-разработчик или хотите изучать более сложные темы.

Изучите Python с нашим полным руководством по питону, независимо от того, начинаете ли вы или начинающий программист, ищущий новые навыки.