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