Python JSON: kodēt (dump), atšifrēt (ielādēt) json Data & Fails (piemērs)

Satura rādītājs:

Anonim

Kas ir JSON?

JSON ir standarta datu apmaiņas formāts, kura pamatā ir JavaScript. Parasti JSON ir virknes vai teksta formātā. JSON apzīmē J ava S cript O bject N otation.

JSON sintakse: JSON ir rakstīts kā atslēgu un vērtību pāris.

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

JSON ir ļoti līdzīgs Python vārdnīcai. Python atbalsta JSON, un tam ir iebūvēta bibliotēka kā JSON.

JSON bibliotēka Python

Python ārējie moduļi ' marshal ' un ' pickle' uztur JSON bibliotēkas versiju . Lai veiktu ar JSON saistītas darbības, piemēram, kodēšanu un dekodēšanu Python, vispirms ir jāimportē JSON bibliotēka un tam jūsu .py failā,

import json

JSON modulī ir pieejamas šādas metodes

Metode Apraksts
izgāztuves () kodēšana JSON objektiem
izgāzt () kodēta virkņu rakstīšana failā
slodzes () Atšifrējiet JSON virkni
slodze () Atšifrējiet, kamēr tiek lasīts JSON fails

Python uz JSON (kodējums)

JSON Python bibliotēka pēc noklusējuma veic Python objektu tulkošanu JSON objektos

Python JSON
diktēt Objekts
sarakstā Masīvs
unikods Stīga
skaitlis - int, garš numurs - int
peldēt skaitlis - reāls
Patiesi Patiesi
Nepatiesa Nepatiesa
Nav Null

Python datu konvertēšana uz JSON tiek dēvēta par kodēšanas operāciju. Kodēšana tiek veikta ar JSON bibliotēkas metodes palīdzību - dumps ()

dumps () metode pārveido pitona vārdnīcas objektu JSON virknes datu formātā.

Tagad mēs varam veikt savu pirmo kodēšanas piemēru ar 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)

Izeja:

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

Izveidosim vārdnīcas JSON failu, izmantojot to pašu funkciju dump ()

# 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)

Izeja:

Nav ko parādīt

... Jūsu sistēmā ir izveidots json_file.json, kuru varat pārbaudīt.

JSON uz Python (dekodēšana)

JSON virkņu dekodēšana tiek veikta, izmantojot Python JSON bibliotēkas iebūvētās metodes ielādes () un load () . Šajā tulkošanas tabulā parādīts JSON objektu piemērs Python objektiem, kas ir noderīgi, lai veiktu dekodēšanu JSON virknes Python.

JSON Python
Objekts diktēt
Masīvs sarakstā
Stīga unikods
numurs - int skaitlis - int, garš
skaitlis - reāls peldēt
Patiesi Patiesi
Nepatiesa Nepatiesa
Null Nav

Apskatīsim pamata piemēru dekodēšanai Python, izmantojot funkciju json.loads () ,

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

Izeja:

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

JSON faila dekodēšana vai JSON faila parsēšana Python

PIEZĪME: JSON faila dekodēšana ir saistīta ar faila ievades / izvades (I / O) darbību. JSON failam jābūt jūsu sistēmā norādītajā vietā, kuru pieminat savā programmā.

Piemērs,

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)

Šeit dati ir Python vārdnīcas objekts.

Izeja:

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

Kompakts kodējums Python

Ja jums jāsamazina JSON faila lielums, Python varat izmantot kompaktu kodējumu.

Piemērs,

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)

Izeja:

'["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ēt JSON kodu (diezgan izdrukāts)

  • Mērķis ir uzrakstīt labi formatētu kodu cilvēku izpratnei. Ar glītas drukas palīdzību ikviens var viegli saprast kodu.
  • Piemērs,
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)

Izeja:

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

Lai to labāk saprastu, mainiet ievilkumu uz 40 un ievērojiet

JSON koda pasūtīšana:

Funkcijas arguments sort_keys atribūts izgāztuvēs () sakārtos atslēgu JSON augošā secībā. Arguments sort_keys ir Būla atribūts. Ja ir taisnība, šķirošana ir atļauta citādi

Piemērs,

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)

Izeja:

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

Kā jūs varat novērot atslēgu vecumu, automašīnas, bērni utt. Ir sakārtoti augošā secībā.

Python kompleksa objektu kodēšana

Kompleksam objektam ir divas dažādas daļas, tas ir

  1. Īstā daļa
  2. Iedomāta daļa

Piemērs: 3 + 2i

Pirms veikt sarežģīta objekta kodēšanu, jāpārbauda, ​​vai mainīgais ir sarežģīts vai nē. Jums jāizveido funkcija, kas pārbauda mainīgajā saglabāto vērtību, izmantojot instances metodi.

Izveidosim īpašo funkciju, lai pārbaudītu objektu, kas ir sarežģīts vai piemērots kodēšanai.

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)

Izeja:

'[4.0, 5.0]'

Komplekss JSON objektu dekodēšana Python

Lai atšifrētu sarežģītu objektu JSON, izmantojiet parametru object_hook, kas pārbauda, ​​vai JSON virkne satur vai nav kompleksais objekts. Piemērs,

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)

Izeja:

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

JSON serializācijas klases JSONEncoder pārskats

JSONEncoder klase tiek izmantota jebkura Python objekta serializēšanai, veicot kodēšanu. Tas satur trīs dažādas kodēšanas metodes, kuras ir

  • noklusējums (o) - ieviests apakšklasē un atgriež o objekta sērijveida objektu.
  • kodēt (o) - tas pats, kas metode json.dumps () atgriež Python datu struktūras virkni JSON.
  • iterencode (o) - attēlojiet virkni pa vienam un kodējiet objektu o.

Izmantojot JSONEncoder klases encode () metodi, mēs varam arī kodēt jebkuru Python objektu.

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

Izeja:

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

JSON deserializācijas klases JSONDecoder pārskats

JSONDecoder klase tiek izmantota jebkura Python objekta deserializācijai, veicot dekodēšanu. Tas satur trīs dažādas dekodēšanas metodes, kuras ir

  • noklusējums (o) - ieviests apakšklasē un atgriež deserializēto objektu o objektu.
  • dekodēt (o) - tāda pati kā metode json.loads () atgriež JSON virknes vai datu Python datu struktūru.
  • raw_decode (o) - attēlojiet Python vārdnīcu pa vienam un atšifrējiet objektu o.

Izmantojot JSONDecoder klases dekodēšanas () metodi, mēs varam arī atšifrēt JSON virkni.

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

Izeja:

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

JSON datu dekodēšana no URL: Real Life piemērs

Mēs ielādēsim datus par CityBike NYC (Bike Sharing System) no norādītā URL (https://feeds.citibikenyc.com/stations/stations.json) un pārveidosim vārdnīcas formātā.

Piemērs,

PIEZĪME. - Pārliecinieties, vai pieprasījumu bibliotēka jau ir instalēta jūsu Python. Ja nē, atveriet termināli vai CMD un ierakstiet

  • (Python 3 vai jaunākai versijai ) pip3 instalēšanas pieprasījumi
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])

Izeja:

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

Izņēmumi, kas saistīti ar JSON bibliotēku Python:

  • Klase json.JSONDecoderError apstrādā izņēmumu, kas saistīts ar dekodēšanas darbību. un tā ir ValueError apakšklase .
  • Izņēmums - json.JSONDecoderError (msg, doc)
  • Izņēmuma parametri ir
    • msg - Neformatēts kļūdas ziņojums
    • doc - JSON docs parsēts
    • pos - starta indekss doc, kad tas neizdodas
    • lino - rinda bez izrādēm atbilst poz
    • kols - kolonna neatbilst poz

Piemērs,

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")

Bezgalīgie un NaN numuri Python

JSON datu apmaiņas formāts (RFC - Pieprasīt komentārus) neļauj noteikt Bezgalīga vai Nan vērtība, taču Python-JSON bibliotēkā nav ierobežojumu veikt ar Bezgalību un Nan Vērtību saistītas darbības. Ja JSON iegūst bezgalīgu un Nan datu tipu, nekā tas tiek pārvērsts burtiskajā.

Piemērs,

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))

Izeja:

InfinityNaNinf

Atkārtota atslēga JSON virknē

RFC norāda, ka atslēgas nosaukumam JSON objektā jābūt unikālam, taču tas nav obligāts. Python JSON bibliotēka neizvirza JSON atkārtotu objektu izņēmumu. Tas ignorē visus atkārtotos atslēgu un vērtību pārus un starp tiem uzskata tikai pēdējo atslēgu un vērtību pāri.

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

Izeja:

{'a': 3}

CLI (komandrindas saskarne) ar JSON Python

json.tool nodrošina komandrindas saskarni, lai apstiprinātu JSON diezgan drukas sintaksi. Apskatīsim CLI piemēru

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

Izeja:

{"name": " Kings Authur "}

JSON priekšrocības Python

  • Viegli pārvietoties atpakaļ starp konteineru un vērtību (JSON uz Python un Python uz JSON)
  • Cilvēkiem lasāms (diezgan izdrukāts) JSON objekts
  • Plaši izmantots datu apstrādē.
  • Vienā failā nav vienādas datu struktūras.

JSON ieviešanas ierobežojums Python

  • JSON diapazona deserializatorā un skaitļa prognozēšana
  • JSON virknes un JSON masīvu maksimālais garums un objekta ligzdošanas līmeņi.

Apkrāptu kods

json.dumps (personas_dati)

Izveidot JSON objektu

json.dump (personas_dati, faila_rakstīšana)

Izveidojiet JSON failu, izmantojot Python File I / O

compact_obj = json.dumps (dati, atdalītāji = (',', ':'))

Saspiediet JSON objektu, noņemot atstarpes rakstzīmi no JSON objekta, izmantojot atdalītāju

formatted_obj = json.dumps (dic, ievilkums = 4, atdalītāji = (',', ':'))

JSON koda formatēšana, izmantojot ievilkumu

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

JSON objekta atslēgas kārtošana pēc alfabēta secības

complex_obj = json.dumps (4 + 5j, noklusējums = complex_encode)

Python kompleksa objekta kodēšana JSON

JSONEncoder (). Kodēt (colour_dict)

JSONEncoder klases izmantošana serializācijai

json.loads (datu_ virkne)

JSON virknes dekodēšana Python vārdnīcā, izmantojot funkciju json.loads ()

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

Sarežģīta JSON objekta dekodēšana uz Python

JSONDecoder (). Atšifrēt (colour_string)

JSON dekodēšanas izmantošana Python ar deserializāciju