JSON Python raščlanjivanje: jednostavan vodič

JSON Python raščlanjivanje: jednostavan vodič

JSON (kratica za 'JavaScript Object Notation') je tekstualni format koji olakšava razmjenu podataka između različitih aplikacija. Na primjer, aplikacija napisano na C ++ pokrenut na sustavu Windows može jednostavno razmjenjivati ​​JSON podatke s aplikacijom napisanom na pythonu i koja radi na Linuxu. Njegova jednostavnost i fleksibilnost doveli su do široke uporabe posljednjih godina, osobito u odnosu na ranije formate zasnovane na XML-u.





Dostupne su knjižnice i alati za raščlanjivanje i generiranje JSON -a iz gotovo svih jezika i okruženja. Ovaj se članak koncentrira na metode i pitanja koja proizlaze iz obrade JSON -a pomoću pythona.





Neki uzorci JSON -a

Najčešći JSON entitet s kojim ćete se susresti je objekt : skup preslikavanja ključ-vrijednost u dolje prikazanom formatu.





crni ekran prijenosnog računala toshiba s kursorom

person.json:

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

Evo kako možete predstaviti niz objekata. U ovom prikazu svaka stavka niza je objekt. Slijedi uzorak plaća bejzbol igrača.



plaće.json:

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

Naravno, možete predstavljati i niz skalara. Izgleda ovako:





[
'hello',
'world',
35
]

Raščlanjivanje JSON -a u Pythonu

Python nudi json modul koji se može koristiti za parsiranje JSON -a, kao i za generiranje JSON -a iz python objekata i popisa.

Sljedeći isječak koda pokazuje kako otvoriti JSON datoteku i učitati podatke u varijablu.





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

Kad imate niz koji sadrži JSON podatke, možete ga pretvoriti u Python objekt (ili popis) sa sljedećim:

tipkovni prečac za uspavljivanje računala
obj = json.loads('''{
'firstName': 'Alice',
'lastName': 'Hall',
'age': 35
}''')

Za raščlanjivanje JSON URL -a možete stvoriti URL objekt pomoću urllib2 i koristiti json.load () kao prije.

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

Rukovanje pogreškama

Kad JSON ima greške, dobit ćete ValueError . Možete se nositi s tim i poduzeti korektivne mjere ako je potrebno.

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

Analiza JSON -a iz naredbenog retka

Ponekad je korisno raščlaniti JSON pomoću naredbenog retka python, možda radi provjere grešaka ili dobivanja lijepo uvučenog izlaza.

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

Da biste dobili uvučeni izlaz iz gornje JSON datoteke, možete učiniti sljedeće:

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

Evo kako možete učitati JSON objekt u python i izvući samo ono što vam je potrebno.

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

Pristup podacima

Nakon što učitate JSON podatke u python varijablu, možete pristupiti podacima kao i bilo kojem python dictu (ili popisu ovisno o slučaju). Na primjer, gore navedenim podacima JSON -a može se pristupiti na sljedeći način:

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

Vrste podataka

Vrste podataka automatski se određuju iz podataka. Imajte na umu da dob se raščlanjuje kao cijeli broj.

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

Sljedeća tablica pretvorbe koristi se za pretvaranje iz JSON -a u python.

Raščlanjivanje JSON -a pomoću prilagođene klase

Prema zadanim postavkama, JSON objekt je raščlanjeni u piton dikt . Ponekad ćete možda morati automatski stvoriti objekt vlastite klase iz JSON podataka. To možete učiniti navođenjem objekat_kuka funkcija koja upravlja pretvorbom. Sljedeći primjer pokazuje kako.

Ovdje je prilagođena klasa koja predstavlja Osoba .

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)

Instanca ove klase stvara se prosljeđivanjem potrebnih argumenata na sljedeći način:

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

Da biste koristili ovu klasu za stvaranje instanci prilikom raščlanjivanja JSON -a, potreban vam je objekat_kuka funkcija definirana na sljedeći način: Funkcija prima python dikt i vraća objekt ispravne klase.

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

Sada možete koristiti ovo objekat_kuka funkciju pri pozivanju JSON raščlanjivača.

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

Primjeri upotrebe JSON -a

JSON je danas iznimno popularan. Mnoge web stranice i aplikacije SaaS (softver kao usluga) nude JSON izlaz koji aplikacije mogu izravno koristiti. Neki od javno dostupnih uključuju:

  • StackOverflow/StackExchange. Ovdje je URL koji vraća popis pitanja u JSON formatu.
  • GitHub nudi JSON api na https://developer.github.com/v3/.
  • A evo i Flickr API -ja: https://developer.yahoo.com/flickr/.

Ako tražite više primjera kako ga dobro iskoristiti, pogledajte ovaj vodič izgradnja bot društvenih medija pomoću Pythona .

kako popraviti bsod windows 10

Koristite li JSON za konzumiranje ili pružanje usluga? Koristite li python u svom tehnološkom stogu? Objasnite u komentarima ispod.

Udio Udio Cvrkut E -pošta Isplati li se nadogradnja na Windows 11?

Windows je redizajniran. No, je li to dovoljno da vas uvjeri da prijeđete s Windows 10 na Windows 11?

Pročitajte Dalje
Povezane teme
  • Programiranje
  • Programiranje
  • Piton
O autoru Jay Sridhar(17 objavljenih članaka) Više od Jaya Sridhara

Pretplatite se na naše obavijesti

Pridružite se našem biltenu za tehničke savjete, recenzije, besplatne e -knjige i ekskluzivne ponude!

Kliknite ovdje za pretplatu