Разбор на JSON Python: Просто ръководство

Разбор на JSON Python: Просто ръководство

JSON (означава „JavaScript Object Notation“) е текстов формат, който улеснява обмена на данни между различни приложения. Например приложение написани на C ++ работещи под Windows могат лесно да обменят JSON данни с приложение, написано на python и работещо на Linux. Неговата простота и гъвкавост доведоха до широко използване през последните години, особено за предпочитане пред по-ранните XML-базирани формати.





Налични са библиотеки и инструменти за анализиране и генериране на JSON от почти всеки език и среда. Тази статия се концентрира върху методи и проблеми, произтичащи от обработката на JSON с помощта на python.





Някои проби от JSON

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





как да използвате вашия iphone на вашия компютър

person.json:

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

Ето как можете да представите масив от обекти. В това представяне всеки елемент от масива е обект. Следва извадка от заплатите на бейзболистите.



заплати.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 със следното:

забравих паролата на телефона си за android
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

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

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

Обработка на грешки

Когато JSON има грешки, ще получите a 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 обект е анализиран в питон dict . Понякога може да се наложи автоматично да създадете обект от свой собствен клас от данните на JSON. Можете да направите това, като посочите object_hook функция, която обработва преобразуването. Следващият пример показва как.

Ето персонализиран клас, представляващ a Лице .

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 функция, дефинирана по следния начин: Функцията получава питон dict и връща обект от правилния клас.

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/.
  • А ето и API на Flickr: https://developer.yahoo.com/flickr/.

Ако търсите още примери как да го използвате добре, разгледайте това ръководство създаване на бот за социални медии с помощта на Python .

как да намерите кученца за продажба

Използвате ли JSON за консумация или предоставяне на услуги? И използвате ли python във вашия технологичен стек? Обяснете в коментарите по -долу.

Дял Дял Туит електронна поща Струва ли си да надстроите до Windows 11?

Windows е преработен. Но достатъчно ли е това, за да ви убеди да преминете от Windows 10 към Windows 11?

Прочетете Напред
Свързани теми
  • Програмиране
  • Програмиране
  • Python
За автора Джей Шридхар(17 статии са публикувани) Още от Джей Шридхар

Абонирайте се за нашия бюлетин

Присъединете се към нашия бюлетин за технически съвети, рецензии, безплатни електронни книги и изключителни оферти!

Щракнете тук, за да се абонирате