JSON Python razčlenjevanje: preprost vodnik

JSON Python razčlenjevanje: preprost vodnik

JSON (kratica za 'JavaScript Object Notation') je besedilna oblika, ki olajša izmenjavo podatkov med različnimi aplikacijami. Na primer aplikacija napisano v C ++ ki se izvajajo v sistemu Windows, lahko preprosto izmenjajo podatke JSON z aplikacijo, napisano v pythonu in ki se izvaja v Linuxu. Njegova preprostost in prilagodljivost sta v zadnjih letih privedli do široke uporabe, zlasti v primerjavi s prejšnjimi oblikami, ki temeljijo na XML.





Na voljo so knjižnice in kompleti orodij za razčlenjevanje in ustvarjanje JSON iz skoraj katerega koli jezika in okolja. Ta članek se osredotoča na metode in vprašanja, ki izhajajo iz obdelave JSON z uporabo pythona.





Nekaj ​​vzorcev JSON

Najpogostejša entiteta JSON, s katero se boste srečali, je predmet : niz preslikav ključ-vrednost v spodnji obliki.





kako izklopiti glas na xbox one

person.json:

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

Tukaj lahko predstavite niz predmetov. V tej predstavitvi je vsak element matrike objekt. Sledi vzorec plač igralcev baseballa.



plače.json:

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

Seveda lahko predstavljate tudi vrsto skalarjev. Izgleda takole:





[
'hello',
'world',
35
]

Razčlenjevanje JSON v Pythonu

Python ponuja json modul, ki ga je mogoče uporabiti za razčlenjevanje JSON -a, pa tudi za ustvarjanje JSON -a iz predmetov in seznamov python.

Naslednji delček kode prikazuje, kako odpreti datoteko JSON in naložiti podatke v spremenljivko.





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

Ko imate niz, ki vsebuje podatke JSON, ga lahko pretvorite v objekt (ali seznam) python z naslednjim:

kako narediti lastno anteno
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Če želite razčleniti URL JSON, lahko ustvarite predmet URL z uporabo urllib2 in uporabite json.load () kot prej.

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

Odpravljanje napak

Ko ima JSON napake, boste dobili datoteko Napaka vrednosti . Lahko ravnate z njim in po potrebi ukrepate.

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

Razčlenjevanje JSON iz ukazne vrstice

Včasih je koristno razčleniti JSON z ukazno vrstico python, morda za preverjanje napak ali pridobitev lepo zamaknjenega izhoda.

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'}}

Če želite iz zgornje datoteke JSON dobiti razčlenjeni izhod, lahko storite naslednje:

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'
}
}

In tukaj je, kako lahko naložite predmet JSON v python in izvlečete le tisto, kar potrebujete.

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

Dostop do podatkov

Ko naložite podatke JSON v spremenljivko python, lahko dostopate do podatkov tako, kot bi uporabljali kateri koli python dict (ali seznam glede na primer). Do zgornjih podatkov JSON lahko na primer dostopate na naslednji način:

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

Vrste podatkov

Vrste podatkov se samodejno določijo iz podatkov. Upoštevajte, da starost je razčlenjeno kot celo število.

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

Naslednja tabela pretvorb se uporablja za pretvorbo iz JSON v python.

Razčlenjevanje JSON z uporabo razreda po meri

Privzeto je objekt JSON razčlenjeni v python dikt . Včasih boste morda morali samodejno ustvariti predmet svojega razreda iz podatkov JSON. To lahko storite tako, da določite object_hook funkcijo, ki upravlja pretvorbo. Naslednji primer prikazuje, kako.

Tukaj je razred po meri, ki predstavlja a Oseba .

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)

Primerek tega razreda se ustvari s prenosom zahtevanih argumentov na naslednji način:

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

Če želite uporabiti ta razred za ustvarjanje primerkov pri razčlenjevanju JSON -a, potrebujete object_hook funkcijo, opredeljeno na naslednji način: Funkcija sprejme python dikt in vrne predmet pravilnega razreda.

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

Zdaj lahko uporabite to object_hook funkcijo, ko prikličete razčlenjevalnik 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}

Primeri uporabe JSON

JSON je danes zelo priljubljen. Mnoga spletna mesta in aplikacije SaaS (programska oprema kot storitev) ponujajo izhod JSON, ki ga aplikacije lahko porabijo neposredno. Nekatere od javno dostopnih vključujejo:

  • StackOverflow/StackExchange. Tukaj je URL ki vrne seznam vprašanj v obliki JSON.
  • GitHub ponuja api JSON na https://developer.github.com/v3/.
  • In tukaj je API Flickr: https://developer.yahoo.com/flickr/.

Če iščete več primerov, kako ga dobro uporabiti, si oglejte ta priročnik izdelava botta za družabne medije z uporabo Pythona .

ne morem premakniti aplikacij na SD kartico android

Ali uporabljate JSON za porabo ali zagotavljanje storitev? Ali uporabljate python v svojem tehnološkem nizu? Razložite v spodnjih komentarjih.

Deliti Deliti Cvrkutati E-naslov Ali je vredno nadgraditi na Windows 11?

Windows je bil preoblikovan. Toda ali je to dovolj, da vas prepriča, da preidete z operacijskega sistema Windows 10 na Windows 11?

Preberite Naprej
Sorodne teme
  • Programiranje
  • Programiranje
  • Python
O avtorju Jay Sridhar(17 objavljenih člankov) Več od Jaya Sridharja

Naročite se na naše novice

Pridružite se našemu glasilu za tehnične nasvete, ocene, brezplačne e -knjige in ekskluzivne ponudbe!

Kliknite tukaj, da se naročite