Анализ JSON Python: простое руководство

JSON (расшифровывается как «JavaScript Object Notation») — это текстовый формат, который облегчает обмен данными между различными приложениями. Например, приложение, написанное на C ++

при работе в Windows можно легко обмениваться данными JSON с приложением, написанным на python и работающим в Linux. Его простота и гибкость привели к широкому использованию в последние годы, особенно в отношении более ранних форматов на основе XML.

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

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

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

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

питон

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

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

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

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

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 (или список в зависимости от обстоятельств). Например, к указанным выше данным JSON можно получить доступ следующим образом:

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

Типы данных

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

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

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

JSON в Python Type Mapping

Разбор 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 (Software As A Service) предлагают вывод в формате JSON, который может использоваться приложениями напрямую. Некоторые из общедоступных включают в себя:

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

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

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

Ссылка на основную публикацию
Adblock
detector