JSON Python Parsing: En enkel guide

JSON Python Parsing: En enkel guide

JSON (står for 'JavaScript Object Notation') er et tekstbasert format som letter datautveksling mellom forskjellige applikasjoner. For eksempel en applikasjon skrevet i C ++ kjører på Windows kan enkelt utveksle JSON -data med et program skrevet i python og kjører på Linux. Enkelheten og fleksibiliteten har ført til utbredt bruk de siste årene, spesielt fremfor tidligere XML-baserte formater.





Det er biblioteker og verktøysett tilgjengelig for analyse og generering av JSON fra nesten alle språk og miljøer. Denne artikkelen konsentrerer seg om metoder og problemer som oppstår ved behandling av JSON ved hjelp av python.





Noen JSON -prøver

Den vanligste JSON -enheten du vil støte på er en gjenstand : et sett med nøkkelverdi-tilordninger i formatet vist nedenfor.





hvordan du endrer hovedkontoen på google

person.json:

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

Slik kan du representere en rekke objekter. I denne representasjonen er hvert element i matrisen et objekt. Følgende er et eksempel på lønn til baseballspillere.



pays.json:

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

Selvfølgelig kan du også representere en rekke skalarer. Det ser slik ut:





[
'hello',
'world',
35
]

Parsing JSON i Python

Python gir json modul som kan brukes til både å analysere JSON, samt generere JSON fra python -objekter og lister.

Følgende kodebit viser hvordan du åpner en JSON -fil og laster dataene inn i en variabel.





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

Når du har en streng som inneholder JSON -dataene, kan du konvertere den til et python -objekt (eller liste) med følgende:

hvordan lage et julekort i Photoshop
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

For å analysere en JSON -URL kan du opprette et URL -objekt ved hjelp av urllib2 og bruk json.load () som før.

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

Håndteringsfeil

Når JSON har feil, får du en ValueError . Du kan håndtere det og iverksette korrigerende tiltak om nødvendig.

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

Analyse av JSON fra kommandolinjen

Noen ganger er det nyttig å analysere JSON ved hjelp av python -kommandolinjen, kanskje for å se etter feil eller for å få pent innrykket utgang.

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

For å få innrykket utdata fra JSON -filen ovenfor, kan du gjøre følgende:

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

Og her er hvordan du kan laste JSON -objektet inn i python og bare trekke ut det du trenger.

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

Tilgang til dataene

Når du har lastet JSON -dataene inn i en python -variabel, kan du få tilgang til dataene som du ville gjort med hvilken som helst python -diktering (eller liste alt etter hva som er tilfelle). For eksempel kan JSON -dataene ovenfor nås som følger:

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

Datatyper

Datatyper bestemmes automatisk ut fra dataene. Noter det alder analyseres som et heltall.

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

Følgende konverteringstabell brukes til å konvertere fra JSON til python.

Analyse av JSON ved bruk av en tilpasset klasse

Som standard er et JSON -objekt analysert i en pyton dict . Noen ganger kan du ha behov for å automatisk lage et objekt i din egen klasse fra JSON -dataene. Du kan gjøre det ved å spesifisere en objekt_krok funksjon som håndterer konverteringen. Følgende eksempel viser hvordan.

Her er en tilpasset klasse som representerer a Person .

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)

En forekomst av denne klassen opprettes ved å sende de nødvendige argumentene som følger:

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

For å bruke denne klassen til å opprette forekomster når du analyserer JSON, trenger du en objekt_krok funksjon definert som følger: Funksjonen mottar et python dict og returnerer et objekt av riktig klasse.

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

Du kan nå bruke dette objekt_krok funksjon når du påkaller JSON -parseren.

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

Eksempler på JSON -bruk

JSON er ekstremt populær i dag. Mange nettsteder og SaaS -programmer (Software As A Service) tilbyr JSON -utgang som kan brukes direkte av applikasjoner. Noen av de offentlig tilgjengelige inkluderer:

  • StackOverflow/StackExchange. Her er en URL som returnerer en liste med spørsmål i JSON -format.
  • GitHub tilbyr en JSON -api på https://developer.github.com/v3/.
  • Og her er Flickr API: https://developer.yahoo.com/flickr/.

Hvis du leter etter flere eksempler på hvordan du bruker det godt, kan du se denne guiden til bygge en bot for sosiale medier ved hjelp av Python .

Last ned YouTube -video til kamerarullen

Bruker du JSON til å konsumere eller tilby tjenester? Og bruker du python i teknologibunken din? Forklar i kommentarene nedenfor.

Dele Dele kvitring E -post Er det verdt å oppgradere til Windows 11?

Windows har blitt redesignet. Men er det nok til å overbevise deg om å bytte fra Windows 10 til Windows 11?

Les neste
Relaterte temaer
  • Programmering
  • Programmering
  • Python
Om forfatteren Jay Sridhar(17 artikler publisert) Mer fra Jay Sridhar

Abonner på vårt nyhetsbrev

Bli med i vårt nyhetsbrev for tekniske tips, anmeldelser, gratis ebøker og eksklusive tilbud!

Klikk her for å abonnere