Hvordan jobbe med JSON-data ved hjelp av Python

Denne opplæringen viser hvor enkelt det er å bruke Python programmeringsspråket til å jobbe med JSON data.

Før jeg begynner emnet, la oss kort definere hva vi mener med JSON. La oss se hvordan JSONs hovedwebside definerer det:

JSON (JavaScript Object Notation) er et lett data-utvekslingsformat. Det er lett for mennesker å lese og skrive. Det er enkelt for maskiner å analysere og generere. Det er basert på en delmengde av JavaScript-programmeringsspråket, Standard ECMA-262 3rd Edition - desember 1999. JSON er et tekstformat som er helt språkavhengig, men bruker konvensjoner som er kjent for programmerere av C-familien av språk, inkludert C , C + +, C #, Java, JavaScript, Perl, Python og mange andre. Disse egenskapene gjør JSON til et ideelt språk for data-utveksling.

Dermed er JSON en enkel måte å lage og lagre datastrukturer i JavaScript. Grunnen til at du ser JavaScript i akronym skyldes det faktum at et JavaScript-objekt blir opprettet når du lagrer data med JSON. Men ikke bekymre deg, du trenger ikke å vite JavaScript for å jobbe med JSON-filer, men det handler om selve JSON-syntaksen (formatet).

Kort sagt, JSON er en måte vi lagrer og utveksler data på, som er oppnådd gjennom sin syntaks, og brukes i mange webapplikasjoner. Det fine med JSON er at det har et menneskelig lesbart format, og dette kan være en av grunnene til at du bruker det i dataoverføring, i tillegg til effektiviteten når du arbeider med APIer.

Et eksempel på JSON-formatert data er som følger:

"navn": "Frank", "alder": 39, "isEmployed": true

I denne opplæringen vil jeg vise deg hvordan du bruker Python til å jobbe med JSON-filer. Så, la oss komme i gang!

Python og JSON

Python gjør det enkelt å jobbe med JSON-filer. Modulen som brukes til dette formålet er json modul. Denne modulen skal inkluderes (innebygd) i Python-installasjonen, og du trenger derfor ikke å installere noen eksterne moduler som vi gjorde da vi jobbet med PDF- og Excel-filer. Det eneste du trenger for å kunne bruke denne modulen er å importere det:

importer json

Men hva gjør json bibliotek gjør? Dette biblioteket analyserer hovedsakelig JSON fra filer eller strenger. Det analyserer også JSON i en ordbok eller liste i Python og omvendt, som konverterer en Python-ordbok eller liste inn i JSON-strenger.

JSON til Python

Reading JSON betyr at du konverterer JSON til en Python-verdi (objekt). Som nevnt ovenfor, json biblioteket analyserer JSON i en ordbok eller liste i Python. For å gjøre det bruker vi laster() funksjon (last fra en streng), som følger:

importer json jsonData = '"navn": "Frank", "alder": 39' jsonToPython = json.loads (jsonData)

Hvis du vil se produksjonen, gjør du en skriv ut jsonToPython, I så fall får du følgende utgang:

u'age ': 39, navn': u'Frank '

Dvs., dataene returneres som en Python-ordbok (JSON objektdatastruktur). Så, vil uttalelsen skriv ut jsonToPython ['navn'] returnere noen utdata? Fortsett, prøv det.

Python til JSON

I forrige avsnitt så vi hvordan du konverterer JSON til en Python-verdi (dvs. ordbok). I denne delen vil jeg vise deg hvordan vi kan konvertere (kode) en Python-verdi til JSON.

Si at vi har følgende ordbok i Python:

importer json pythonDictionary = 'navn': 'Bob', 'alder': 44, 'erEmployed': True dictionaryToJson = json.dumps (pythonDictionary)

Hvis vi print dictionaryToJson, vi får følgende JSON data:

"alder": 44, "erEmployert": sant, "navn": "Bob"

Så denne utgangen betraktes som datarepresentasjon av objektet (ordbok). Metoden dumper() var nøkkelen til en slik operasjon.

Det er viktig å merke seg at JSON ikke kan lagre alle typer Python objekter, men bare følgende typer: Lister; ordbøker, booleans; tall; Tegnstrenger; og ingen. Således må alle andre typer konverteres for å bli lagret i JSON.

La oss si at vi har følgende klasse:

klasse Ansatt (objekt): def __init __ (selv, navn): self.name = navn

La oss si at vi opprettet et nytt objekt abder, som følger:

abder = Ansatt ('Abder')

Hva om vi ønsket å konvertere dette objektet til JSON? Det er json.dumps (abder)? I dette tilfellet vil du få en feil som ligner på følgende:

Traceback (siste samtalen sist): File "test.py", linje 8, i  abderJson = json.dumps (abder) File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", linje 243, i dumper returnerer _default_encoder.encode (obj) File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py", linje 207, i kode koder = self.iterencode (o, _one_shot = True) File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py" , linje 270, i iterencode retur _iterencode (o, 0) File "/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py" , linje 184, i standard heve TypeError (repr (o) + "er ikke JSON serializable") TypeError: <__main__.Employee object at 0x10e74b750> er ikke JSON serializable

Men er det en løsning? Heldigvis er det. Jeg liker løsningen beskrevet på Python Tips nettsiden. For å løse dette problemet kan vi definere en metode som ligner på følgende:

def jsonDefault (objekt): returnere objekt .__ dict__

Kodes deretter objektet inn i JSON som følger:

jsonAbder = json.dumps (abder, default = jsonDefault)

Hvis du skriv ut jsonAbder, du bør få følgende utgang:

"navn": "Abder"

Vi har nå kodet et Python-objekt (abder) til JSON.

Konklusjon

Fra denne opplæringen kan vi merke at Python igjen og igjen viser at det ikke bare er evnen til å jobbe med forskjellige applikasjoner, men også fleksibiliteten til å jobbe med forskjellige problemer mens du arbeider med et program, som vi så i den siste delen av opplæringen.

Hvis du vil vite mer om json modul, kan du besøke dokumentasjonssiden.

Lær JavaScript: Den komplette veiledningen

Vi har bygget en komplett guide for å hjelpe deg med å lære JavaScript, enten du er bare i gang som webutvikler eller du vil utforske mer avanserte emner.

Lær python

Lær Python med vår komplette pythonveiledning, enten du er bare i gang eller du er en erfaren coder som ønsker å lære nye ferdigheter..