JSON (розшифровується як «JavaScript Object Notation») - це текстовий формат, який полегшує обмін даними між різними програмами. Наприклад, додаток, написаний на C++ роботі в Windows можна легко обмінюватися даними JSON з додатком, написаним на python і працює в Linux. Його простота і гнучкість призвели до широкого використання в останні роки, особливо щодо більш ранніх форматів на основі XML.
- Деякі зразки JSON
- person.json:
- salaries.json:
- Розбір JSON в Python
- Обробка помилок
- Розбір JSON з командного рядка
- Доступ до даних
- Типи даних
- Розбір JSON з використанням власного класу
- Приклади використання JSON
- Чи використовуєте ви JSON для споживання або надання послуг? І ви використовуєте Python у своєму технологічному стеку? Поясніть у коментарях нижче.
Існують бібліотеки та набори інструментів для аналізу та генерації 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
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 <type 'unicode'> <type 'unicode'> <type 'int'>
Наступна таблиця перетворення використовується для перетворення з JSON на python.
Розбір JSON з використанням власного класу
За замовчуванням JSON-об'єкт аналізується в python dict. Іноді вам може знадобитися автоматично створити об'єкт вашого власного класу з даних JSON. Ви можете зробити це, вказавши функцію object_hook, яка обробляє перетворення. У наступному прикладі показано як.
Ось клас користувача, який представляє Person.
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, визначена наступним чином: функція отримує диктон python і повертає об'єкт правильного класу.
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 пропонує API-інтерфейс JSON за адресою https://developer.github.com/v3/.
- А ось API Flickr: https://developer.yahoo.com/flickr/.
Якщо ви шукаєте більше прикладів того, як ефективно його використовувати, ознайомтеся з цим керівництвом зі створення бота в соціальних мережах з використанням Python.