JSON Pythoni parsimine: lihtne juhend

JSON Pythoni parsimine: lihtne juhend

JSON (tähistab JavaScript Object Notation) on tekstipõhine vorming, mis hõlbustab andmete vahetamist erinevate rakenduste vahel. Näiteks rakendus kirjutatud C ++ keeles Windowsis töötades saate hõlpsalt vahetada JSON -i andmeid rakendusega, mis on kirjutatud pythonis ja töötab Linuxis. Selle lihtsus ja paindlikkus on viimastel aastatel toonud kaasa laialdase kasutamise, eriti eelistatuna varasematele XML-põhistele vormingutele.





JSON -i analüüsimiseks ja genereerimiseks peaaegu igast keelest ja keskkonnast on saadaval raamatukogud ja tööriistakomplektid. See artikkel keskendub meetoditele ja probleemidele, mis tekivad JSON -i töötlemisel pythoni abil.





Mõned JSON -proovid

Kõige tavalisem JSON -i üksus, millega kokku puutute, on objekti : võtmeväärtuste vastenduste komplekt allpool näidatud vormingus.





mida tähendab triip tekstisõnumites

person.json:

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

Siin on, kuidas saate objektide massiivi kujutada. Selles esituses on massiivi iga üksus objekt. Allpool on näide pesapallurite palkadest.



palgad.json:

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

Loomulikult võite esindada ka skalaare. See näeb välja selline:





[
'hello',
'world',
35
]

JSONi parsimine Pythonis

Python pakub json moodul, mida saab kasutada nii JSON -i sõelumiseks kui ka JSON -i genereerimiseks pythoni objektidest ja loenditest.

Järgmine koodilõik näitab, kuidas avada JSON -fail ja laadida andmed muutujale.





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

Kui teil on string, mis sisaldab JSON -i andmeid, saate need teisendada pythoni objektiks (või loendiks) järgmiselt.

miks google chrome nii palju protsessorit kasutab?
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

JSON -i URL -i sõelumiseks saate luua URL -i objekti, kasutades urllib2 ja kasutada json.load () nagu enne.

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

Käsitsemisvead

Kui JSON -il on vigu, saate a Viga väärtuses . Saate sellega hakkama ja vajadusel parandusmeetmeid võtta.

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

JSON -i sõelumine käsurealt

Mõnikord on kasulik JSON -i sõeluda pythoni käsurealt, näiteks vigade otsimiseks või kenasti taandunud väljundi saamiseks.

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

Ülaltoodud JSON -failist taandväljundi saamiseks võite teha järgmist.

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

Ja siin on, kuidas saate JSON -i objekti pythonisse laadida ja ekstraheerida ainult seda, mida vajate.

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

Juurdepääs andmetele

Kui olete JSON -i andmed pythoni muutujale laadinud, pääsete andmetele juurde nagu igale pythoni diktile (või loendile). Näiteks ülaltoodud JSON -i andmetele pääseb juurde järgmiselt.

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

Andmetüübid

Andmetüübid määratakse andmete põhjal automaatselt. Pange tähele, et vanus parsitakse täisarvuna.

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

Järgmist teisendustabelit kasutatakse teisendamiseks JSON -st pythoniks.

JSON -i sõelumine kohandatud klassi abil

Vaikimisi on JSON -objekt parsitud püütoniks dikteerima . Mõnikord võib tekkida vajadus automaatselt luua JSON -i andmetest oma klassi objekt. Seda saate teha, määrates objekt_konks funktsioon, mis tegeleb teisendamisega. Järgmine näide näitab, kuidas.

Siin on kohandatud klass, mis esindab a Isik .

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)

Selle klassi eksemplar luuakse nõutavate argumentide edastamisega järgmiselt.

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

Selle klassi kasutamiseks eksemplaride loomiseks JSON -i analüüsimisel vajate objekt_konks funktsioon on määratletud järgmiselt: Funktsioon võtab vastu püütoni dikteerima ja tagastab õige klassi objekti.

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

Nüüd saate seda kasutada objekt_konks funktsiooni JSON parseri käivitamisel.

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

JSONi kasutamise näited

JSON on tänapäeval väga populaarne. Paljud veebisaidid ja SaaS (tarkvara teenusena) rakendused pakuvad JSON -väljundit, mida rakendused saavad otse tarbida. Mõned avalikult kättesaadavad on järgmised:

  • StackOverflow/StackExchange. Siin on URL mis tagastab küsimuste loendi JSON -vormingus.
  • GitHub pakub JSON -i api aadressil https://developer.github.com/v3/.
  • Ja siin on Flickri API: https://developer.yahoo.com/flickr/.

Kui otsite rohkem näiteid selle kasutamise kohta, vaadake seda juhendit sotsiaalmeedia roboti loomine Pythoni abil .

kuidas parandada bsod windows 10

Kas kasutate JSONi teenuste tarbimiseks või pakkumiseks? Ja kas kasutate oma tehnoloogias virnas pythonit? Selgitage allpool olevates kommentaarides.

Jaga Jaga Piiksuma E -post Kas tasub Windows 11 -le üle minna?

Windows on ümber kujundatud. Kuid kas sellest piisab, et veenda teid Windows 10 -lt Windows 11 -le üle minema?

Loe edasi
Seotud teemad
  • Programmeerimine
  • Programmeerimine
  • Python
Autori kohta Jay Sridhar(17 artiklit avaldatud) Veel Jay Sridharilt

Telli meie uudiskiri

Liituge meie uudiskirjaga, et saada tehnilisi näpunäiteid, ülevaateid, tasuta e -raamatuid ja eksklusiivseid pakkumisi!

Tellimiseks klõpsake siin