
Peter Holmes
0
3286
179
JSON (zalaže se za “Napomena o JavaScript objektu”) tekstualni je format koji olakšava razmjenu podataka između različitih aplikacija. Na primjer, aplikacija napisana na C ++ Kako popraviti Windows Visual C ++ runtime error Kako popraviti Windows Visual C ++ Runtime error Visual C ++ Greške su čest problem za korisnike Windowsa. Ali znate li kako ih popraviti? trčanje pod Windowsom može lako razmjenjivati JSON podatke s aplikacijom napisanom na pythonu i koja se izvodi na Linuxu. Njegova jednostavnost i fleksibilnost doveli su do raširene upotrebe posljednjih godina, posebno u prednosti prema starijim XML temeljenim formatima.
Postoje biblioteke i alati za analizu i generiranje JSON-a iz gotovo svakog jezika i okruženja. Ovaj se članak koncentrira na metode i probleme koji proizlaze iz obrade JSON-a pomoću pythona.
Neki JSON uzorci
Najčešći JSON entitet s kojim ćete se susresti je an objekt: skup mapiranja ključa i vrijednosti u donjem formatu.
person.json:
"firstName": "Alice", "lastName": "Hall", "age": 35
Evo kako možete predstaviti niz objekata. U ovom predstavljanju, svaka stavka matrice je objekt. Slijedi uzorak plaća bejzbol igrača.
salaries.json:
["godina": 1985, "teamId": "ATL", "leagueId": "NL", "playerId": "barkele01", "plaća": 870000, "godina": 1985, "teamId": "ATL", "leagueId": "NL", "playerId": "bedrost01", "plaća": 550000]
Naravno, možete predstavljati i niz skalara. To izgleda ovako:
["zdravo", "svijet", 35]
Parkiranje JSON-a u Pythonu
Python Kako doći do Python-a i JavaScript-a za komunikaciju pomoću JSON-a Kako do Pythona i JavaScript-a za komunikaciju pomoću JSON-a Danas ću vam pokazati kako pomoću JSON-a možete slati podatke iz JavaScript-a u Python. Opisat ću kako postaviti web poslužitelj, zajedno sa svim kodom koji vam je potreban. pruža JSON modul koji se može koristiti za raščlanjivanje 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.
uvesti json s otvorenim ('sample.json', 'r') kao fp: obj = json.load (fp)
Kada imate niz koji sadrži JSON podatke, možete ga pretvoriti u objekt python (ili popis) sa sljedećim:
obj = json.loads ("" "" firstName ":" Alice "," lastName ":" Hall "," age ": 35" "")
Za analizu 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)
Pogreške pri rukovanju
Kad JSON ima pogreške, dobit ćete a ValueError. Možete to podnijeti i po potrebi poduzmite korektivne mjere.
probajte: obj = json.loads ("" "" firstName ":" Alice "," lastName: "Hall", "age": 35 "" "), osim ValueError: print" error loading JSON "
Razmatranje JSON-a iz naredbenog retka
Ponekad je korisno rastaviti JSON pomoću naredbenog retka python, možda provjeriti pogreške i dobiti lijepo razveden izlaz.
mačka glossary.json # ispise "glossary": "GlossDiv": "GlossList": "GlossEntry": "GlossDef": "GlossSeeAlso": ["GML", "XML"], "para": "Meta-označni jezik koji se koristi za izradu označnih jezika poput DocBook.", "GlossSee": "označavanje", "Akronim": "SGML", "GlossTerm": "Standardni generalizirani označni jezik", "Skraćenica": "ISO 8879: 1986", "SortAs": "SGML", "ID": "SGML", "title": "S", "title": "primjer glosar"
Da biste dobili razvedeni izlaz iz gornje JSON datoteke, možete učiniti sljedeće:
python -mjson.tool glossary.json # ispisuje "glossary": "GlossDiv": "GlossList": "GlossEntry": "Abbrev": "ISO 8879: 1986", "Akronim": "SGML", "GlossDef": "GlossSeeAlso": ["GML", "XML"], "para": "Meta-označni jezik koji se koristi za stvaranje označnih jezika kao što je DocBook." , "GlossSee": "označavanje", "GlossTerm": "Standardni generalizirani označni jezik", "ID": "SGML", "SortAs": "SGML", "naslov": "S", "naslov ":" primjer glosar "
A evo kako JSON objekt možete učitati u python i izdvojiti samo ono što vam treba.
python -c 'uvoz json; fp = otvoren ("glossary.json", "r"); obj = json.load (fp); fp.close (); print obj ["glosar"] ["title"] '# ispisuje primjer glosar
Pristup podacima
Nakon što stavite JSON podatke u python varijablu, možete im pristupiti kao i bilo koji python diict (ili popis ovisno o slučaju). Na primjer, gore navedenim JSON podacima 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. Primjetite to dob raščlanjen je kao cijeli broj.
vrsta ispisa (obj ["firstName"]), vrsta (obj ["lastName"]), vrsta (obj ["age"]) # ispisa
Sljedeća tablica konverzije koristi se za pretvorbu iz JSON-a u python.
Razvrstavanje JSON-a pomoću prilagođene klase
Prema zadanim postavkama, JSON objekt se raščlanjuje na piton dict. Ponekad će vam možda trebati automatska izrada objekta vlastite klase iz podataka JSON. To možete učiniti tako da navedete an object_hook funkcija koja upravlja pretvorbom. Sljedeći primjer pokazuje kako.
Ovdje je prilagođena klasa koja predstavlja Osoba.
Osoba klase: def __init __ (self, prvo ime, prezime, dob): self.firstName = firstName self.lastName = lastName self.age = age def __str __ (self): povratak '"firstName" = "0", "lastName" = "1", "age" = 2 '. format (self.firstName, self.lastName, self.age)
Instanca ove klase stvorena je slanjem potrebnih argumenata na sljedeći način:
osoba = osoba ("Crystal", "Newell", 27)
Da biste koristili ovu klasu za stvaranje primjera prilikom raščlanjivanja JSON-a, potreban vam je object_hook funkcija definirana na sljedeći način: Funkcija prima python dict i vraća objekt ispravne klase.
def obj_creator (d): osoba za povratak (d ['firstName'], d ['lastName'], d ['age'])
Sada to možete koristiti object_hook funkcija kad se poziva JSON parser.
s otvorenim ('sample.json', 'r') kao fp: obj = json.load (fp, object_hook = obj_creator) ispis obj # print "firstName" = "Alice", "lastName" = "Hall", " dob "= 35
Primjeri upotrebe JSON-a
JSON je danas izuzetno popularan. Mnoge web stranice i SaaS (Software As A Service) aplikacije nude JSON izlaz koji aplikacije mogu konzumirati izravno. Neke 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 ovdje je Flickr API: https://developer.yahoo.com/flickr/.
Ako tražite dodatne primjere kako ga dobro iskoristiti, pogledajte ovaj vodič za izgradnju bot društvenog medija pomoću Pythona.
Koristite li JSON za konzumiranje ili pružanje usluga? A koristite li python u svojoj tehnologiji? Objasnite u komentarima u nastavku.