Bruk jsonify() i stedet for json.dumps() i Flask
Her vil vi forstå jsonify()-funksjonen i Flask-nettrammeverket for Python som konverterer utdata fra en funksjon til et JSON-responsobjekt. Det ligner på j son.dumps() funksjon i Python-standardbiblioteket, som konverterer et Python-objekt til en JSON-formatert streng.
Hva er jsonify()
Funksjonen jsonify() er nyttig i Flask-apper fordi den automatisk setter riktige svarhoder og innholdstype for JSON-svar, og lar deg enkelt returnere JSON-formaterte data fra rutebehandlerne dine. Dette gjør det enklere og mer praktisk å lage APIer som returnerer JSON-data.
Syntaks for jsonify()-funksjonen
Denne funksjonen tar inn ett eller flere posisjonsargumenter, som representerer dataene som skal konverteres til et JSON-svarobjekt, og et hvilket som helst antall nøkkelordargumenter, som brukes til å tilpasse JSON-svarobjektet.
jsonify(*args, **kwargs)
Eksempel på jsonify() med uten argument
Du kan bruke jsonify() uten noen argumenter, i dette tilfellet vil det returnere et tomt JSON-svarobjekt med en standard statuskode på 200 (OK) og en standard innholdstype for applikasjon/json.
Python3
from> flask> import> Flask, jsonify> app> => Flask(__name__)> @app> .route(> '/api/users'> )> def> get_users():> > return> jsonify()> |
Eksempel på jsonify() med argumenter
I dette eksemplet kaller vi jsonify() med et enkelt posisjonsargument (listen over brukerobjekter), samt to nøkkelordargumenter med status og mimetype. Statusargumentet brukes til å angi HTTP-statuskoden for svaret, og mimetype-argumentet brukes til å angi innholdstypen for svaret.
Python3
from> flask> import> Flask, jsonify> app> => Flask(__name__)> @app> .route(> '/api/users'> )> def> get_users():> > users> => [{> 'id'> :> 1> ,> 'username'> :> 'Alice'> }, {> 'id'> :> 2> ,> 'username'> :> 'Bob'> }]> > return> jsonify(users, status> => 200> , mimetype> => 'application/json'> )> |
jsonify()-metoden i Flask
I dette eksemplet har vi en Flask-app med en rute som returnerer en liste over brukerobjekter. Når en klient sender en forespørsel til denne ruten, utføres get_users()-funksjonen og listen over brukerobjekter konverteres til et JSON-svarobjekt ved å bruke jsonify()-funksjonen. Dette JSON-svarobjektet sendes deretter tilbake til klienten.
Python3
from> flask> import> Flask, jsonify> app> => Flask(__name__)> @app> .route(> '/'> )> def> get_users():> > print> (> 'Using jsonify'> )> > users> => [{> 'id'> :> 1> ,> 'username'> :> 'sweety'> },> > {> 'id'> :> 2> ,> 'username'> :> 'pallavi'> }]> > return> jsonify({> 'users'> : users})> if> __name__> => => '__main__'> :> > app.run()> |
Produksjon:
jsonify()-metoden
json.dumps()-metoden i Flask
I motsetning, hvis du skulle bruke json.dumps() funksjon, må du selv konvertere listen over brukerobjekter til en JSON-formatert streng, og deretter angi de riktige svarhodene og returnere svaret til klienten manuelt:
Å bruke jsonify() er generelt enklere og mer praktisk enn å bruke json.dumps(), så det anbefales å bruke jsonify() når det er mulig i Flask-apper.
Python3
from> flask> import> Flask, Response> import> json> app> => Flask(__name__)> @app> .route(> '/api/users'> )> def> get_users():> > users> => [{> 'id'> :> 1> ,> 'username'> :> 'sweety'> },> > {> 'id'> :> 2> ,> 'username'> :> 'pandey'> }]> > response> => Response(> > response> => json.dumps(users),> > status> => 200> ,> > mimetype> => 'application/json'> > )> > return> response> if> __name__> => => '__main__'> :> > app.run()> |
Produksjon:
http://127.0.0.1:5000/api/users
Hvorfor bruke jsonify() i stedet for json.dumps()
Det er flere grunner til at det anbefales å bruke jsonify()-funksjonen i stedet for json.dumps()-funksjonen i Flask-apper:
- jsonify() er mer praktisk og enklere å bruke enn json.dumps(). jsonify() har en enkel og intuitiv syntaks, og den håndterer automatisk detaljene for å konvertere dataene dine til et JSON-svarobjekt og returnere det til klienten. Derimot krever json.dumps() at du håndterer disse detaljene selv, noe som kan være mer tidkrevende og utsatt for feil.
- jsonify() setter automatisk de riktige svarhodene og innholdstypen for JSON-svar, mens json.dumps() ikke gjør det. Dette betyr at du ikke trenger å manuelt sette Content-Type-overskriften til application/json når du bruker jsonify(), men du må gjøre det manuelt når du bruker json.dumps().
- jsonify() lar deg enkelt returnere JSON-formaterte data fra rutebehandlerne dine, mens json.dumps() ikke gjør det. Med jsonify() kan du ganske enkelt returnere dataene du ønsker skal konverteres til et JSON-svarobjekt fra rutebehandleren din, og jsonify() tar seg av resten. Med json.dumps(), må du selv konvertere dataene til en JSON-formatert streng og deretter returnere den som en del av et Response-objekt.
- Totalt sett kan bruk av jsonify() i stedet for json.dumps() i Flask-apper gjøre det enklere og mer praktisk å lage APIer som returnerer JSON-data. Den lar deg fokusere på dataene og logikken til appen din, i stedet for å måtte bekymre deg for detaljene rundt formatering og returnering av JSON-svar.