JSON Python parsēšana: vienkāršs ceļvedis

JSON Python parsēšana: vienkāršs ceļvedis

JSON (apzīmē “JavaScript Object Notation”) ir teksta formāts, kas atvieglo datu apmaiņu starp dažādām lietojumprogrammām. Piemēram, lietojumprogramma rakstīts C ++ operētājsistēmā Windows var viegli apmainīties ar JSON datiem ar lietojumprogrammu, kas rakstīta python un darbojas Linux. Tās vienkāršība un elastība pēdējos gados ir izraisījusi plašu izmantošanu, īpaši dodot priekšroku agrākiem XML formātiem.





Ir pieejamas bibliotēkas un rīkkopas, lai analizētu un ģenerētu JSON no gandrīz jebkuras valodas un vides. Šis raksts koncentrējas uz metodēm un problēmām, kas rodas, apstrādājot JSON, izmantojot python.





Daži JSON paraugi

Visbiežāk sastopamā JSON entītija ir objekts : atslēgu vērtību kartējumu kopa tālāk norādītajā formātā.





kā saglabāt videoklipus savā iPhone

person.json:

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

Lūk, kā jūs varat attēlot objektu masīvu. Šajā attēlā katrs masīva vienums ir objekts. Tālāk ir sniegts beisbola spēlētāju algu paraugs.



algas.json:

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

Protams, jūs varat pārstāvēt arī skalāru masīvu. Tas izskatās šādi:





[
'hello',
'world',
35
]

JSON parsēšana Python

Python nodrošina json modulis, ko var izmantot gan JSON parsēšanai, gan arī JSON ģenerēšanai no python objektiem un sarakstiem.

Šis koda fragments parāda, kā atvērt JSON failu un ielādēt datus mainīgajā.





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

Ja jums ir virkne, kas satur JSON datus, varat to pārvērst par python objektu (vai sarakstu), veicot tālāk norādītās darbības.

kā izveidot izplatīšanas sarakstu programmā Outlook
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Lai parsētu JSON URL, varat izveidot URL objektu, izmantojot urllib2 un izmantot json.load () kā iepriekš.

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

Apstrādes kļūdas

Ja JSON ir kļūdas, jūs saņemsiet ValueError . Jūs varat rīkoties un vajadzības gadījumā veikt korektīvas darbības.

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

JSON parsēšana no komandrindas

Dažreiz ir lietderīgi parsēt JSON, izmantojot komandrindu python, iespējams, lai pārbaudītu kļūdas vai iegūtu labi ievilktu izvadi.

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

Lai iegūtu ievilktu izvadi no iepriekš minētā JSON faila, varat rīkoties šādi:

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

Lūk, kā jūs varat ielādēt JSON objektu python un iegūt tikai to, kas jums nepieciešams.

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

Piekļuve datiem

Kad esat ielādējis JSON datus python mainīgajā, varat piekļūt datiem tāpat kā jebkuram python diktam (vai sarakstam). Piemēram, iepriekš minētajiem JSON datiem var piekļūt šādi:

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

Datu veidi

Datu veidi tiek automātiski noteikti no datiem. Pieraksti to vecums tiek parsēts kā vesels skaitlis.

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

Lai konvertētu no JSON uz python, tiek izmantota šāda reklāmguvumu tabula.

JSON parsēšana, izmantojot pielāgotu klasi

Pēc noklusējuma JSON objekts ir parsēts pitonā dikti . Dažreiz jums var būt nepieciešams automātiski izveidot savas klases objektu no JSON datiem. To var izdarīt, norādot object_hook funkcija, kas apstrādā konvertēšanu. Šis piemērs parāda, kā.

Šeit ir pielāgota klase, kas attēlo a Persona .

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)

Šīs klases piemērs tiek izveidots, nododot nepieciešamos argumentus šādi:

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

Lai izmantotu šo klasi, lai izveidotu gadījumus, analizējot JSON, jums ir nepieciešams object_hook funkcija definēta šādi: Funkcija saņem pitonu dikti un atgriež pareizas klases objektu.

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

Tagad varat izmantot šo object_hook funkcija, izsaucot JSON parsētāju.

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 lietošanas piemēri

Mūsdienās JSON ir ļoti populārs. Daudzas vietnes un SaaS (programmatūras kā pakalpojuma) lietojumprogrammas piedāvā JSON izvadi, ko lietojumprogrammas var patērēt tieši. Daži no publiski pieejamiem ir šādi:

  • StackOverflow/StackExchange. Šeit ir URL kas atgriež jautājumu sarakstu JSON formātā.
  • GitHub piedāvā JSON api vietnē https://developer.github.com/v3/.
  • Un šeit ir Flickr API: https://developer.yahoo.com/flickr/.

Ja meklējat citus piemērus, kā to pareizi izmantot, skatiet šo rokasgrāmatu izveidot sociālo mediju robotu, izmantojot Python .

kāpēc mani klēpjdatoru fani ir tik skaļi?

Vai jūs izmantojat JSON, lai patērētu vai sniegtu pakalpojumus? Un vai jūs savā tehnoloģiju kaudzē izmantojat python? Paskaidrojiet tālāk sniegtajos komentāros.

Kopīgot Kopīgot Čivināt E -pasts Vai ir vērts jaunināt uz Windows 11?

Windows ir pārveidots. Bet vai ar to pietiek, lai pārliecinātu jūs pāriet no Windows 10 uz Windows 11?

Lasīt Tālāk
Saistītās tēmas
  • Programmēšana
  • Programmēšana
  • Python
Par autoru Džejs Šridhars(Publicēti 17 raksti) Vairāk no Jay Sridhar

Abonējiet mūsu biļetenu

Pievienojieties mūsu informatīvajam izdevumam, lai iegūtu tehniskus padomus, pārskatus, bezmaksas e -grāmatas un ekskluzīvus piedāvājumus!

Noklikšķiniet šeit, lai abonētu