„JSON Python Parsing“: paprastas vadovas

„JSON Python Parsing“: paprastas vadovas

JSON (reiškia „JavaScript Object Notation“) yra tekstinis formatas, palengvinantis keitimąsi duomenimis tarp įvairių programų. Pavyzdžiui, programa parašyta C ++ veikiant „Windows“ gali lengvai keistis JSON duomenimis su programa, parašyta „python“ ir veikiančia „Linux“. Dėl savo paprastumo ir lankstumo pastaraisiais metais jis buvo plačiai naudojamas, ypač pirmenybė teikiama ankstesniems XML formatams.





Yra bibliotekų ir įrankių rinkinių, skirtų analizuoti ir generuoti JSON iš beveik bet kokios kalbos ir aplinkos. Šiame straipsnyje daugiausia dėmesio skiriama metodams ir problemoms, kylančioms apdorojant JSON naudojant „python“.





Kai kurie JSON pavyzdžiai

Dažniausias JSON subjektas, su kuriuo susidursite, yra objektas : toliau pateikto formato raktinių verčių susiejimų rinkinys.





ką reiškia žymė „Messenger“

person.json:

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

Štai kaip galite pavaizduoti objektų masyvą. Šiame atvaizdavime kiekvienas masyvo elementas yra objektas. Toliau pateikiamas beisbolo žaidėjų atlyginimų pavyzdys.



algas.json:

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

Žinoma, jūs taip pat galite atstovauti skaliarų masyvą. Tai atrodo taip:





[
'hello',
'world',
35
]

JSON analizavimas „Python“

„Python“ teikia json modulis, kuris gali būti naudojamas tiek JSON analizei, tiek JSON generavimui iš „python“ objektų ir sąrašų.

Šis kodo fragmentas parodo, kaip atidaryti JSON failą ir įkelti duomenis į kintamąjį.





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

Kai turite eilutę, kurioje yra JSON duomenys, galite ją konvertuoti į python objektą (arba sąrašą), atlikdami šiuos veiksmus:

kaip rasti vietinius televizijos kanalus
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Norėdami išanalizuoti JSON URL, galite sukurti URL objektą naudodami urllib2 ir naudoti json.load () kaip ir anksčiau.

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

Tvarkymo klaidos

Kai JSON turės klaidų, gausite „ValueError“ . Galite susitvarkyti ir, jei reikia, imtis taisomųjų veiksmų.

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

JSON analizavimas iš komandinės eilutės

Kartais naudinga išanalizuoti JSON naudojant „python“ komandų eilutę, galbūt patikrinti, ar nėra klaidų, ar gauti gražiai įterptą išvestį.

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

Norėdami gauti įtrauktą išvestį iš aukščiau pateikto JSON failo, galite atlikti šiuos veiksmus:

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

Štai kaip galite įkelti „JSON“ objektą į „python“ ir išgauti tik tai, ko jums reikia.

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

Prieiga prie duomenų

Įkėlę JSON duomenis į kintamąjį „python“, galite prieiti prie duomenų, kaip ir bet kuris „python“ diktatas (ar atitinkamai sąrašas). Pavyzdžiui, aukščiau pateiktus JSON duomenis galima pasiekti taip:

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

Duomenų tipai

Duomenų tipai automatiškai nustatomi pagal duomenis. Prisimink tai amžiaus analizuojamas kaip sveikasis skaičius.

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

Ši konvertavimo lentelė naudojama konvertuoti iš JSON į python.

JSON analizavimas naudojant pasirinktinę klasę

Pagal numatytuosius nustatymus JSON objektas yra surikiuotas į pitoną diktuoti . Kartais gali tekti automatiškai sukurti savo klasės objektą iš JSON duomenų. Tai galite padaryti nurodydami object_hook funkcija, kuri tvarko konversiją. Šis pavyzdys parodo, kaip.

Čia yra pasirinktinė klasė, vaizduojanti a Asmuo .

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)

Šios klasės egzempliorius sukuriamas perduodant reikiamus argumentus taip:

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

Jei norite naudoti šią klasę kurdami egzempliorius analizuodami JSON, jums reikia object_hook funkcija apibrėžiama taip: Funkcija gauna python diktuoti ir grąžina teisingos klasės objektą.

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

Dabar galite tai naudoti object_hook funkcija iškviečiant JSON analizatorių.

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 naudojimo pavyzdžiai

JSON yra labai populiarus šiais laikais. Daugelis svetainių ir „SaaS“ („Software as A Service“) programos siūlo JSON išvestį, kurią programos gali naudoti tiesiogiai. Kai kurie iš viešai prieinamų yra:

  • StackOverflow/StackExchange. Čia yra URL kuris grąžina klausimų sąrašą JSON formatu.
  • „GitHub“ siūlo JSON API svetainėje https://developer.github.com/v3/.
  • Ir čia yra „Flickr“ API: https://developer.yahoo.com/flickr/.

Jei ieškote daugiau pavyzdžių, kaip jį tinkamai panaudoti, peržiūrėkite šį vadovą sukurti socialinės žiniasklaidos robotą naudojant „Python“ .

žaidimai, kuriuos galite žaisti, kai jums nuobodu internete

Ar naudojate JSON paslaugoms vartoti ar teikti? O ar naudojate „python“ savo technologijų kaminoje? Paaiškinkite toliau pateiktose pastabose.

Dalintis Dalintis „Tweet“ Paštu Ar verta atnaujinti į „Windows 11“?

„Windows“ buvo pertvarkytas. Bet ar to pakanka norint įtikinti jus pereiti nuo „Windows 10“ prie „Windows 11“?

Skaityti toliau
Susijusios temos
  • Programavimas
  • Programavimas
  • Python
Apie autorių Jay Sridhar(Paskelbti 17 straipsnių) Daugiau iš Jay Sridhar

Prenumeruokite mūsų naujienlaiškį

Prisijunkite prie mūsų naujienlaiškio, kad gautumėte techninių patarimų, apžvalgų, nemokamų el. Knygų ir išskirtinių pasiūlymų!

Norėdami užsiprenumeruoti, spustelėkite čia