JSON Python Parsing: En simpel vejledning

JSON Python Parsing: En simpel vejledning

JSON (står for 'JavaScript Object Notation') er et tekstbaseret format, der letter dataudveksling mellem forskellige applikationer. For eksempel en applikation skrevet i C ++ kører på Windows kan let udveksle JSON -data med et program, der er skrevet i python og kører på Linux. Dens enkelhed og fleksibilitet har ført til udbredt brug i de seneste år, især frem for tidligere XML-baserede formater.





Der er biblioteker og værktøjskasser til rådighed til analyse og generering af JSON fra næsten ethvert sprog og miljø. Denne artikel koncentrerer sig om metoder og problemer, der opstår ved behandling af JSON ved hjælp af python.





Nogle JSON -prøver

Den mest almindelige JSON -enhed, du vil støde på, er en objekt : et sæt nøgleværditilknytninger i formatet vist nedenfor.





hvordan tilføjer du flere billeder til instagram -historien

person.json:

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

Sådan kan du repræsentere en række objekter. I denne repræsentation er hvert element i arrayet et objekt. Følgende er et eksempel på lønninger 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å repræsentere en række skalarer. Det ser sådan ud:





[
'hello',
'world',
35
]

Parsing af JSON i Python

Python leverer json modul, der kan bruges til både at analysere JSON, samt generere JSON fra python -objekter og lister.

Følgende kodestykke viser, hvordan man åbner en JSON -fil og indlæser dataene i en variabel.





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

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

der ringede til mig fra dette nummer
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

For at analysere en JSON -URL kan du oprette et URL -objekt ved hjælp af urllib2 og brug json.load () som før.

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

Håndteringsfejl

Når JSON har fejl, får du en ValueError . Du kan håndtere det og tage korrigerende handlinger, hvis det kræves.

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

Parsing af JSON fra kommandolinjen

Nogle gange er det nyttigt at analysere JSON ved hjælp af python -kommandolinjen, måske for at kontrollere for fejl eller for at opnå pænt indrykket output.

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 at opnå indrykket output fra ovenstående JSON -fil kan du gø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 indlæse JSON -objektet i python og udtrække kun det, du har brug for.

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

Adgang til dataene

Når du har indlæst JSON -dataene i en python -variabel, kan du få adgang til dataene, som du ville have enhver python -diktering (eller liste alt efter omstændighederne). For eksempel kan ovenstående JSON -data tilgås som følger:

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

Datatyper

Datatyper bestemmes automatisk ud fra dataene. Noter det alder analyseres som et heltal.

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

Følgende konverteringstabel bruges til at konvertere fra JSON til python.

Parsing af JSON ved hjælp af en brugerdefineret klasse

Som standard er et JSON -objekt analyseret i en python dikt . Nogle gange har du måske behovet for automatisk at oprette et objekt i din egen klasse ud fra JSON -dataene. Det kan du gøre ved at angive en objekt_krog funktion, der håndterer konverteringen. Følgende eksempel viser hvordan.

Her er en brugerdefineret klasse, der repræsenterer 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 af denne klasse oprettes ved at sende de nødvendige argumenter som følger:

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

Hvis du vil bruge denne klasse til at oprette forekomster ved analyse af JSON, skal du bruge en objekt_krog funktion defineret som følger: Funktionen modtager en python dikt og returnerer et objekt af den korrekte klasse.

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

Du kan nu bruge dette objekt_krog funktion, når JSON -parseren påberåbes.

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

JSON er ekstremt populær i dag. Mange websteder og SaaS (Software As A Service) -applikationer tilbyder JSON -output, der kan forbruges direkte af applikationer. Nogle af de offentligt tilgængelige inkluderer:

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

Hvis du leder efter flere eksempler på, hvordan du kan bruge det godt, kan du tjekke denne vejledning til opbygning af en social media -bot ved hjælp af Python .

hvordan man sletter en profil på netflix

Bruger du JSON til at forbruge eller levere tjenester? Og bruger du python i din teknologiske stak? Forklar i kommentarerne herunder.

Del Del Tweet E -mail Er det værd at opgradere til Windows 11?

Windows er blevet redesignet. Men er det nok til at overbevise dig om at skifte fra Windows 10 til Windows 11?

Læs Næste
Relaterede emner
  • Programmering
  • Programmering
  • Python
Om forfatteren Jay Sridhar(17 artikler udgivet) Mere fra Jay Sridhar

Abonner på vores nyhedsbrev

Tilmeld dig vores nyhedsbrev for at få tekniske tips, anmeldelser, gratis e -bøger og eksklusive tilbud!

Klik her for at abonnere