JSON Python Parsing: En enkel guide

JSON Python Parsing: En enkel guide

JSON (står för 'JavaScript Object Notation') är ett textbaserat format som underlättar datautbyte mellan olika applikationer. Till exempel en applikation skrivet i C ++ kör på Windows kan enkelt utbyta JSON -data med ett program skrivet i python och körs på Linux. Dess enkelhet och flexibilitet har lett till utbredd användning de senaste åren, särskilt framför tidigare XML-baserade format.





Det finns bibliotek och verktygssatser tillgängliga för analys och generering av JSON från nästan alla språk och miljöer. Den här artikeln koncentrerar sig på metoder och problem som uppstår vid bearbetning av JSON med python.





Några JSON -prover

Den vanligaste JSON -enheten som du kommer att stöta på är en objekt : en uppsättning nyckelvärdesmappningar i formatet som visas nedan.





hur man ansluter en xbox 360 -kontroller till en mac

person.json:

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

Så här kan du representera en rad objekt. I denna representation är varje objekt i matrisen ett objekt. Följande är ett exempel på löner för basebollspelare.



löner.json:

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

Naturligtvis kan du också representera en rad skalarer. Det ser ut så här:





[
'hello',
'world',
35
]

Parsing JSON i Python

Python tillhandahåller json modul som kan användas för att både analysera JSON, samt generera JSON från pythonobjekt och listor.

Följande kodavsnitt visar hur man öppnar en JSON -fil och läser in data i en variabel.





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

När du har en sträng som innehåller JSON -data kan du konvertera den till ett python -objekt (eller lista) med följande:

hur vet jag det anslutna wifi -lösenordet på Android
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

För att analysera en JSON -URL kan du skapa ett URL -objekt med urllib2 och använda json.load () som förut.

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

Hanteringsfel

När JSON har fel får du en ValueError . Du kan hantera det och vidta korrigerande åtgärder om det behövs.

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

Analysera JSON från kommandoraden

Ibland är det användbart att analysera JSON med python -kommandoraden, kanske för att leta efter fel eller för att få snyggt indragen utdata.

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

För att få indragen utmatning från ovanstående JSON -fil kan du göra följande:

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

Och så här kan du ladda JSON -objektet till python och bara extrahera det du behöver.

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

Åtkomst till data

När du har laddat JSON -data i en pythonvariabel kan du få åtkomst till informationen på samma sätt som vilken pythondikt som helst (eller en lista efter omständigheterna). Till exempel kan ovanstående JSON -data nås enligt följande:

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

Datatyper

Datatyper bestäms automatiskt utifrån data. Anteckna det ålder analyseras som ett heltal.

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

Följande konverteringstabell används för att konvertera från JSON till python.

Analysera JSON med hjälp av en anpassad klass

Som standard är ett JSON -objekt analyseras i en python dict . Ibland kan du behöva automatiskt skapa ett objekt i din egen klass från JSON -data. Du kan göra det genom att ange en objekt_krok funktion som hanterar konverteringen. Följande exempel visar hur.

Här är en anpassad klass som representerar 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 instans av denna klass skapas genom att skicka de nödvändiga argumenten enligt följande:

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

För att använda den här klassen för att skapa instanser när du analyserar JSON behöver du en objekt_krok funktion definieras enligt följande: Funktionen tar emot en python dict och returnerar ett objekt av rätt klass.

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

Du kan nu använda detta objekt_krok funktion när du anropar JSON -parsern.

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

Exempel på JSON -användning

JSON är extremt populärt nuförtiden. Många webbplatser och SaaS (Software As A Service) -applikationer erbjuder JSON -utdata som kan konsumeras direkt av applikationer. Några av de offentligt tillgängliga inkluderar:

  • StackOverflow/StackExchange. Här är en URL som returnerar en lista med frågor i JSON -format.
  • GitHub erbjuder en JSON -API på https://developer.github.com/v3/.
  • Och här är Flickr API: https://developer.yahoo.com/flickr/.

Om du letar efter fler exempel på hur du använder det på ett bra sätt, kolla in den här guiden till bygga en social media -bot med Python .

vidarebefordra mail från outlook till gmail

Använder du JSON för att konsumera eller tillhandahålla tjänster? Och använder du python i din teknikstack? Förklara i kommentarerna nedan.

Dela med sig Dela med sig Tweet E-post Är det värt att uppgradera till Windows 11?

Windows har gjorts om. Men är det tillräckligt för att övertyga dig om att byta från Windows 10 till Windows 11?

Läs Nästa
Relaterade ämnen
  • Programmering
  • Programmering
  • Pytonorm
Om författaren Jay Sridhar(17 artiklar publicerade) Mer från Jay Sridhar

Prenumerera på vårt nyhetsbrev

Gå med i vårt nyhetsbrev för tekniska tips, recensioner, gratis e -böcker och exklusiva erbjudanden!

Klicka här för att prenumerera