Разбор JSON Python: простое руководство

Разбор JSON Python: простое руководство

JSON (расшифровывается как «JavaScript Object Notation») - это текстовый формат, который упрощает обмен данными между различными приложениями. Например, приложение написано на C ++ работающий в Windows может легко обмениваться данными JSON с приложением, написанным на Python и работающим в Linux. Его простота и гибкость привели к широкому использованию в последние годы, особенно в пользу более ранних форматов на основе XML.





Существуют библиотеки и наборы инструментов для синтаксического анализа и генерации JSON практически из любого языка и среды. В этой статье рассматриваются методы и проблемы, возникающие при обработке JSON с помощью Python.





Некоторые образцы JSON

Самая распространенная сущность JSON, с которой вы столкнетесь, - это объект : набор сопоставлений 'ключ-значение' в формате, показанном ниже.





значок питания Windows 10 не отображается

person.json:

{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}

Вот как вы можете представить массив объектов. В этом представлении каждый элемент массива является объектом. Ниже приводится пример заработной платы бейсболистов.



salaries.json:

[ {
'year' : 1985,
'teamId' : 'ATL',
'leagueId' : 'NL',
'playerId' : 'barkele01',
'salary' : 870000
}, {
'year' : 1985,
'teamId' : 'ATL',
'leagueId' : 'NL',
'playerId' : 'bedrost01',
'salary' : 550000
} ]

Конечно, вы также можете представить массив скаляров. Это выглядит так:





[
'hello',
'world',
35
]

Разбор JSON в Python

Python предоставляет json модуль, который можно использовать как для синтаксического анализа JSON, так и для генерации JSON из объектов и списков python.

В следующем фрагменте кода показано, как открыть файл JSON и загрузить данные в переменную.





import json
with open('sample.json', 'r') as fp:
obj = json.load(fp)

Если у вас есть строка, содержащая данные JSON, вы можете преобразовать ее в объект (или список) python следующим образом:

файл открыт в проводнике Windows
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Чтобы проанализировать URL-адрес JSON, вы можете создать объект URL-адреса, используя urllib2 и использовать json.load () как прежде.

import urllib2, json
url = urllib2.urlopen('http://site.com/sample.json')
obj = json.load(url)

Обработка ошибок

Когда в JSON есть ошибки, вы получите ValueError . Вы можете справиться с этим и при необходимости предпринять корректирующие действия.

try:
obj = json.loads('''{
'firstName': 'Alice',
'lastName: 'Hall',
'age': 35
}''')
except ValueError:
print('error loading JSON')

Разбор JSON из командной строки

Иногда полезно анализировать JSON с помощью командной строки python, возможно, для проверки ошибок или для получения вывода с красивым отступом.

cat glossary.json
# prints
{'glossary': {'GlossDiv': {'GlossList': {'GlossEntry': {'GlossDef': {'GlossSeeAlso': ['GML', 'XML'], 'para': 'A meta-markup language, used to create markup languages such as DocBook.'}, 'GlossSee': 'markup', 'Acronym': 'SGML', 'GlossTerm': 'Standard Generalized Markup Language', 'Abbrev': 'ISO 8879:1986', 'SortAs': 'SGML', 'ID': 'SGML'}}, 'title': 'S'}, 'title': 'example glossary'}}

Чтобы получить вывод с отступом из указанного выше файла JSON, вы можете сделать следующее:

python -mjson.tool glossary.json
# prints
{
'glossary': {
'GlossDiv': {
'GlossList': {
'GlossEntry': {
'Abbrev': 'ISO 8879:1986',
'Acronym': 'SGML',
'GlossDef': {
'GlossSeeAlso': [
'GML',
'XML'
],
'para': 'A meta-markup language, used to create markup languages such as DocBook.'
},
'GlossSee': 'markup',
'GlossTerm': 'Standard Generalized Markup Language',
'ID': 'SGML',
'SortAs': 'SGML'
}
},
'title': 'S'
},
'title': 'example glossary'
}
}

А вот как вы можете загрузить объект JSON в python и извлечь только то, что вам нужно.

python -c 'import json; fp = open('glossary.json', 'r'); obj = json.load(fp); fp.close(); print(obj['glossary']['title']')
# prints
example glossary

Доступ к данным

После того, как вы загрузили данные JSON в переменную python, вы можете получить доступ к данным, как если бы вы использовали любой python dict (или список, в зависимости от случая). Например, к указанным выше данным JSON можно получить доступ следующим образом:

firstName = obj['firstName']
lastName = obj['Hall']
age = obj['age']

Типы данных

Типы данных автоматически определяются из данных. Обратите внимание, что возраст анализируется как целое число.

print(type(obj['firstName']), type(obj['lastName']), type(obj['age']))
# prints

Следующая таблица преобразования используется для преобразования из JSON в Python.

Разбор JSON с использованием настраиваемого класса

По умолчанию объект JSON разобран на питон диктовать . Иногда у вас может возникнуть необходимость в автоматическом создании объекта вашего собственного класса из данных JSON. Вы можете сделать это, указав object_hook функция, которая обрабатывает преобразование. В следующем примере показано, как это сделать.

Вот пользовательский класс, представляющий Человек .

class Person:
def __init__(self, firstName, lastName, age):
self.firstName = firstName
self.lastName = lastName
self.age = age
def __str__(self):
return '{{'firstName' = '{0}','lastName' = '{1}', 'age' = {2}}}'.format(self.firstName, self.lastName, self.age)

Экземпляр этого класса создается путем передачи необходимых аргументов следующим образом:

person = Person('Crystal', 'Newell', 27)

Чтобы использовать этот класс для создания экземпляров при разборе JSON, вам понадобится object_hook функция определяется следующим образом: функция получает питон диктовать и возвращает объект правильного класса.

def obj_creator(d):
return Person(d['firstName'], d['lastName'], d['age'])

Теперь вы можете использовать это object_hook функция при вызове парсера JSON.

with open('sample.json', 'r') as fp:
obj = json.load(fp, object_hook = obj_creator)
print(obj)
# prints
{'firstName' = 'Alice','lastName' = 'Hall', 'age' = 35}

Примеры использования JSON

JSON сейчас чрезвычайно популярен. Многие веб-сайты и приложения SaaS (программное обеспечение как услуга) предлагают выходные данные в формате JSON, которые могут напрямую использоваться приложениями. Вот некоторые из общедоступных:

  • StackOverflow / StackExchange. Вот URL который возвращает список вопросов в формате JSON.
  • GitHub предлагает JSON api по адресу https://developer.github.com/v3/.
  • А вот и Flickr API: https://developer.yahoo.com/flickr/.

Если вы ищете больше примеров того, как использовать его с пользой, ознакомьтесь с этим руководством, чтобы создание бота для социальных сетей с использованием Python .

как исправить высокую загрузку процессора

Вы используете JSON для потребления или предоставления услуг? И используете ли вы Python в своем технологическом стеке? Объясните в комментариях ниже.

Делиться Делиться Твитнуть Эл. адрес Стоит ли переходить на Windows 11?

Окна были переработаны. Но достаточно ли этого, чтобы убедить вас перейти с Windows 10 на Windows 11?

Читать далее
Похожие темы
  • Программирование
  • Программирование
  • Python
Об авторе Джей Шридхар(Опубликовано 17 статей) Ещё от Jay Sridhar

Подписывайтесь на нашу новостную рассылку

Подпишитесь на нашу рассылку, чтобы получать технические советы, обзоры, бесплатные электронные книги и эксклюзивные предложения!

Нажмите здесь, чтобы подписаться