Python JSON: Kode (dump), dekode (last) json Data & Fil (eksempel)

Innholdsfortegnelse:

Anonim

Hva er JSON?

JSON er et standardformat for datautveksling, som er inspirert av JavaScript. Vanligvis er JSON i streng- eller tekstformat. JSON står for J ava S cript O bject N otation.

Syntaksen til JSON: JSON skrives som nøkkel- og verdipar.

{"Key": "Value","Key": "Value",}

JSON er veldig lik Python-ordbok. Python støtter JSON, og den har et innebygd bibliotek som en JSON.

JSON-biblioteket i Python

' Marshal ' og ' pickle' eksterne moduler av Python har en versjon av JSON- biblioteket. For å utføre JSON-relaterte operasjoner som koding og dekoding i Python, må du først importere JSON-biblioteket og for det i .py- filen,

import json

Følgende metoder er tilgjengelige i JSON-modulen

Metode Beskrivelse
dumper() koding til JSON-objekter
dump () kodet strengskriving på fil
laster() Dekoder JSON-strengen
laste() Dekoder mens JSON-filen leses

Python til JSON (koding)

JSON Library of Python utfører som standard følgende oversettelse av Python-objekter til JSON-objekter

Python JSON
diktere Gjenstand
liste Array
unicode String
nummer - int, lang nummer - int
flyte nummer - ekte
ekte ekte
Falsk Falsk
Ingen Null

Konvertering av Python-data til JSON kalles en kodingsoperasjon. Koding gjøres ved hjelp av JSON-biblioteksmetoden - dumps ()

dumps () -metoden konverterer ordbokobjektet til python til JSON-strengdataformat.

Nå kan vi utføre vårt første kodeeksempel med Python.

import jsonx = {"name": "Ken","age": 45,"married": True,"children": ("Alice","Bob"),"pets": ['Dog'],"cars": [{"model": "Audi A1", "mpg": 15.1},{"model": "Zeep Compass", "mpg": 18.1}]}# sorting result in asscending order by keys:sorted_string = json.dumps(x, indent=4, sort_keys=True)print(sorted_string)

Produksjon:

{"person": {"name": "Kenn", "sex": "male", "age": 28}})

La oss lage en JSON-fil av ordboken ved hjelp av samme funksjonsdump ()

# here we create new data_file.json file with write mode using file i/o operationwith open('json_file.json', "w") as file_write:# write json data into filejson.dump(person_data, file_write)

Produksjon:

Ingenting å vise

... I systemet json_file.json er opprettet, kan du sjekke den filen.

JSON til Python (dekoding)

JSON-strengavkoding gjøres ved hjelp av innebygd metodelast () og last () av JSON-bibliotek i Python. Her viser oversettelsestabellen eksempel på JSON-objekter til Python-objekter som er nyttige for å utføre dekoding i Python av JSON-streng.

JSON Python
Gjenstand diktere
Array liste
String unicode
nummer - int nummer - int, lang
nummer - ekte flyte
ekte ekte
Falsk Falsk
Null Ingen

La oss se et grunnleggende eksempel på dekoding i Python ved hjelp av json.loads () -funksjonen,

import json # json library imported# json data stringperson_data = '{ "person": { "name": "Kenn", "sex": "male", "age": 28}}'# Decoding or converting JSON format in dictionary using loads()dict_obj = json.loads(person_data)print(dict_obj)# check type of dict_objprint("Type of dict_obj", type(dict_obj))# get human object detailsprint("Person… ", dict_obj.get('person'))

Produksjon:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_obj Person… {'name': 'John', 'sex': 'male'}

Dekoding av JSON File eller Parsing JSON-fil i Python

MERK: Dekoding av JSON-fil er File Input / Output (I / O) -relatert operasjon. JSON-filen må eksistere på systemet ditt på det angitte stedet du nevner i programmet.

Eksempel,

import json#File I/O Open function for read data from JSON Filewith open('X:/json_file.json') as file_object:# store file data in objectdata = json.load(file_object)print(data)

Her er data et ordbokobjekt for Python.

Produksjon:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}

Kompakt koding i Python

Når du trenger å redusere størrelsen på JSON-filen din, kan du bruke kompakt koding i Python.

Eksempel,

import json# Create a List that contains dictionarylst = ['a', 'b', 'c',{'4': 5, '6': 7}]# separator used for compact representation of JSON.# Use of ',' to identify list items# Use of ':' to identify key and value in dictionarycompact_obj = json.dumps(lst, separators=(',', ':'))print(compact_obj)

Produksjon:

'["a", "b", "c", {"4": 5, "6": 7}]'** Here output of JSON is represented in a single line which is the most compact representation by removing the space character from compact_obj ** 

Format JSON-kode (pen utskrift)

  • Målet er å skrive godt formatert kode for menneskelig forståelse. Ved hjelp av pen utskrift kan alle enkelt forstå koden.
  • Eksempel,
import jsondic = { 'a': 4, 'b': 5 }''' To format the code use of indent and 4 shows number of space and use of separator is not necessary but standard way to write code of particular function. '''formatted_obj = json.dumps(dic, indent=4, separators=(',', ': '))print(formatted_obj)

Produksjon:

{"a" : 4,"b" : 5}

For bedre å forstå dette, endre innrykk til 40 og observer utdata-

Bestille JSON-koden:

sort_keys- attributt i dumps () -funksjonens argument sorterer nøkkelen i JSON i stigende rekkefølge. Argumentet sort_keys er et boolsk attributt. Når det er sant, er sortering tillatt ellers ikke

Eksempel,

import jsonx = {"name": "Ken","age": 45,"married": True,"children": ("Alice", "Bob"),"pets": [ 'Dog' ],"cars": [{"model": "Audi A1", "mpg": 15.1},{"model": "Zeep Compass", "mpg": 18.1}],}# sorting result in asscending order by keys:sorted_string = json.dumps(x, indent=4, sort_keys=True)print(sorted_string)

Produksjon:

{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}

Som du kan observere nøklene, er biler, barn osv. Ordnet i stigende rekkefølge.

Kompleks objektkoding av Python

Et komplekst objekt har to forskjellige deler

  1. Ekte del
  2. Imaginær del

Eksempel: 3 + 2i

Før du utfører koding av et komplekst objekt, må du kontrollere at en variabel er kompleks eller ikke. Du må opprette en funksjon som sjekker verdien som er lagret i en variabel ved hjelp av en forekomstmetode.

La oss lage den spesifikke funksjonen for sjekkobjektet er komplisert eller kvalifisert for koding.

import json# create function to check instance is complex or notdef complex_encode(object):# check using isinstance methodif isinstance(object, complex):return [object.real, object.imag]# raised error using exception handling if object is not complexraise TypeError(repr(object) + " is not JSON serialized")# perform json encoding by passing parametercomplex_obj = json.dumps(4 + 5j, default=complex_encode)print(complex_obj)

Produksjon:

'[4.0, 5.0]'

Kompleks JSON-objektavkoding i Python

For å dekode komplekst objekt i JSON, bruk en objekt_hook-parameter som sjekker JSON-strengen inneholder det komplekse objektet eller ikke. Eksempel,

import json# function check JSON string contains complex objectdef is_complex(objct):if '__complex__' in objct:return complex(objct['real'], objct['img'])return objct# use of json loads method with object_hook for check object complex or notcomplex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)#here we not passed complex object so it's convert into dictionarysimple_object =json.loads('{"real": 6, "img": 7}', object_hook = is_complex)print("Complex_object… ",complex_object)print("Without_complex_object… ",simple_object)

Produksjon:

Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}

Oversikt over JSON Serialization klasse JSONEncoder

JSONEncoder-klassen brukes til serialisering av ethvert Python-objekt mens du utfører koding. Den inneholder tre forskjellige metoder for koding som er

  • standard (o) - Implementert i underklassen og returner serialiseringsobjektet for o- objektet.
  • kode (o) - Samme som json.dumps () metode returnerer JSON-streng av Python-datastruktur.
  • iterencode (o) - Representer streng en etter en og koder objekt o.

Ved hjelp av encode () -metoden i JSONEncoder-klassen kan vi også kode hvilket som helst Python-objekt.

# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)

Produksjon:

'{"colour": ["red", "yellow", "green"]}'

Oversikt over JSON Deserialization klasse JSONDecoder

JSONDecoder-klassen brukes til deserialisering av ethvert Python-objekt mens du utfører dekoding. Den inneholder tre forskjellige metoder for dekoding som er

  • standard (o) - Implementert i underklassen og returner deserialisert objekt o objekt.
  • dekode (o) - Samme som metoden json.loads () returnerer Python-datastruktur av JSON-streng eller data.
  • raw_decode (o) - Representer Python-ordbok en etter en og dekode objekt o.

Ved hjelp av dekode () -metoden til JSONDecoder-klassen kan vi også dekode JSON-streng.

import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)

Produksjon:

{'colour': ['red', 'yellow']}

Dekoding av JSON-data fra URL: Eksempel på virkelige liv

Vi henter data fra CityBike NYC (Bike Sharing System) fra spesifisert URL (https://feeds.citibikenyc.com/stations/stations.json) og konverterer til ordbokformat.

Eksempel,

MERKNAD: - Forsikre deg om at forespørselsbiblioteket allerede er installert i Python, hvis ikke, så åpne Terminal eller CMD og skriv

  • (For Python 3 eller nyere) pip3 installasjonsforespørsler
import jsonimport requests# get JSON string data from CityBike NYC using web requests libraryjson_response= requests.get("https://feeds.citibikenyc.com/stations/stations.json")# check type of json_response objectprint(type(json_response.text))# load data in loads() function of json librarybike_dict = json.loads(json_response.text)#check type of news_dictprint(type(bike_dict))# now get stationBeanList key data from dictprint(bike_dict['stationBeanList'][0])

Produksjon:

{'id': 487,'stationName': 'E 20 St & FDR Drive','availableDocks': 24,'totalDocks': 34,'latitude': 40.73314259,'longitude': -73.97573881,'statusValue': 'In Service','statusKey': 1,'availableBikes': 9,'stAddress1': 'E 20 St & FDR Drive','stAddress2': '','city': '','postalCode': '','location': '','altitude': '','testStation': False,'lastCommunicationTime': '2018-12-11 10:59:09 PM', 'landMark': ''}

Unntak knyttet til JSON-biblioteket i Python:

  • Klasse json.JSONDecoderError håndterer unntaket knyttet til dekoding. og det er en underklasse av ValueError.
  • Unntak - json.JSONDecoderError (msg, doc)
  • Parametere for unntak er,
    • msg - Uformatert feilmelding
    • doc - JSON docs analysert
    • pos - start indeks for doc når den mislyktes
    • lineno - line no shows tilsvarer pos
    • kolon - kolonne nr tilsvarer pos

Eksempel,

import json#File I/O Open function for read data from JSON Filedata = {} #Define Empty Dictionary Objecttry:with open('json_file_name.json') as file_object:data = json.load(file_object)except ValueError:print("Bad JSON file format, Change JSON File")

Uendelige og NaN-tall i Python

JSON Data Interchange Format (RFC - Request For Comments) tillater ikke uendelig eller nan-verdi, men det er ingen begrensning i Python-JSON-biblioteket for å utføre uendelig og nan-verdi-relatert operasjon. Hvis JSON får INFINITE og Nan datatype enn det konverteres det til bokstavelig.

Eksempel,

import json# pass float Infinite valueinfinite_json = json.dumps(float('inf'))# check infinite json typeprint(infinite_json)print(type(infinite_json))json_nan = json.dumps(float('nan'))print(json_nan)# pass json_string as Infinityinfinite = json.loads('Infinity')print(infinite)# check type of Infinityprint(type(infinite))

Produksjon:

InfinityNaNinf

Gjentatt nøkkel i JSON-streng

RFC angir at nøkkelnavnet skal være unikt i et JSON-objekt, men det er ikke obligatorisk. Python JSON-bibliotek tar ikke opp et unntak for gjentatte objekter i JSON. Den ignorerer alt gjentatt nøkkelverdipar og anser bare det siste nøkkelverdiparet blant dem.

  • Eksempel,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)

Produksjon:

{'a': 3}

CLI (Command Line Interface) med JSON i Python

json.tool gir kommandolinjegrensesnittet for å validere JSON synkaks med ganske utskrift. La oss se et eksempel på CLI

$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool

Produksjon:

{"name": " Kings Authur "}

Fordeler med JSON i Python

  • Lett å flytte tilbake mellom container og verdi (JSON til Python og Python til JSON)
  • Menneskelig JSON-objekt (ganske trykt)
  • Mye brukt i datahåndtering.
  • Har ikke den samme datastrukturen i enkeltfilen.

Implementeringsbegrensning av JSON i Python

  • I deserializer av JSON rekkevidde og prediksjon av et tall
  • Maksimal lengde på JSON-streng og arrays av JSON og nestingsnivåer av objekt.

Juksekode

json.dumps (person_data)

Opprett JSON-objekt

json.dump (person_data, file_write)

Opprett JSON-fil ved hjelp av fil I / O av Python

compact_obj = json.dumps (data, separatorer = (',', ':'))

Kompakt JSON-objekt ved å fjerne mellomromstegn fra JSON-objekt ved hjelp av separator

formatted_obj = json.dumps (dic, indent = 4, separators = (',', ':'))

Formatering av JSON-kode ved hjelp av innrykk

sorted_string = json.dumps (x, innrykk = 4, sort_keys = True)

Sorterer JSON-objektnøkkel etter alfabetisk rekkefølge

complex_obj = json.dumps (4 + 5j, standard = complex_encode)

Python Complex Object-koding i JSON

JSONEncoder (). Koding (colour_dict)

Bruk av JSONEncoder-klasse for serialisering

json.loads (data_string)

Dekoding av JSON-streng i Python-ordbok ved hjelp av funksjonen json.loads ()

json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex)

Dekoding av komplekst JSON-objekt til Python

JSONDecoder (). Dekode (colour_string)

Bruk av dekoding av JSON til Python med deserialisering