Kas yra JSON?
JSON yra standartinis keitimosi duomenimis formatas, kurį įkvėpė „JavaScript“. Paprastai JSON yra eilutės arba teksto formatu. JSON reiškia „ J ava S“ scenarijaus „ O bject N otation“.
JSON sintaksė: JSON parašyta kaip raktų ir reikšmių pora.
{"Key": "Value","Key": "Value",}
JSON yra labai panašus į „ Python“ žodyną. „Python“ palaiko JSON, o jame yra integruota biblioteka kaip JSON.
JSON biblioteka „Python“
„ Marshal “ ir „ pickle“ išoriniai „Python “ moduliai palaiko JSON bibliotekos versiją . Norėdami atlikti su JSON susijusias operacijas, pvz., „Python“ kodavimą ir dekodavimą, pirmiausia turite importuoti JSON biblioteką ir tai padaryti savo .py faile,
import json
Šie metodai yra JSON modulyje
Metodas | apibūdinimas |
---|---|
sąvartynai () | kodavimas JSON objektams |
išpilti () | užkoduotas eilutės rašymas faile |
apkrovos () | Iškoduokite JSON eilutę |
apkrova () | Dekoduokite skaitydami JSON failą |
„Python“ į JSON (kodavimas)
JSON Python biblioteka pagal numatytuosius nustatymus atlieka Python objektų vertimą į JSON objektus
„Python“ | JSON |
diktuoti | Objektas |
sąrašą | Masyvas |
„unicode“ | Stygos |
skaičius - int, ilgas | skaičius - tarpt |
plūdė | skaičius - tikras |
Tiesa | Tiesa |
Klaidinga | Klaidinga |
Nė vienas | Null |
„Python“ duomenų konvertavimas į JSON vadinamas kodavimo operacija. Kodavimas atliekamas naudojant JSON bibliotekos metodą - dumps ()
metodas dumps () paverčia python žodyno objektą į JSON eilutės duomenų formatą.
Dabar galime atlikti savo pirmąjį kodavimo pavyzdį naudodami „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)
Išvestis:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Sukurkime žodyno JSON failą naudodami tą pačią funkciją 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)
Išvestis:
Nieko nerodyti
... Jūsų sistemoje sukurta json_file.json galite patikrinti tą failą.JSON į „Python“ (dekodavimas)
JSON eilutė dekodavimo daroma su Integruotą metodas pagalba krovinį () & apkrovos () JSON bibliotekos Python. Čia vertimo lentelėje pateikiami JSON objektų pavyzdžiai „Python“ objektams, kurie yra naudingi atliekant JSON eilutės „Python“ dekodavimą.
JSON | „Python“ |
Objektas | diktuoti |
Masyvas | sąrašą |
Stygos | „unicode“ |
skaičius - tarpt | skaičius - int, ilgas |
skaičius - tikras | plūdė |
Tiesa | Tiesa |
Klaidinga | Klaidinga |
Null | Nė vienas |
Pažiūrėkime pagrindinį „Python“ dekodavimo pavyzdį su funkcija 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'))
Išvestis:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_objPerson… {'name': 'John', 'sex': 'male'}
JSON failo dekodavimas arba JSON failo analizavimas „Python“
PASTABA: JSON failo dekodavimas yra susijęs su failo įvesties / išvesties (įvesties / išvesties) operacija. JSON failas turi būti jūsų sistemoje nurodytoje vietoje, kurią paminėjate savo programoje.
Pavyzdys,
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)
Čia duomenys yra „Python“ žodyno objektas.
Išvestis:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Kompaktiškas kodavimas „Python“
Kai reikia sumažinti JSON failo dydį, „Python“ galite naudoti kompaktišką kodavimą.
Pavyzdys,
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)
Išvestis:
'["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 **
Formatuoti JSON kodą (gražus spausdinimas)
- Tikslas yra parašyti gerai suformatuotą kodą, kad žmogus suprastų. Gražaus spausdinimo pagalba kiekvienas gali lengvai suprasti kodą.
- Pavyzdys,
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)
Išvestis:
{"a" : 4,"b" : 5}
Norėdami tai geriau suprasti, pakeiskite įtrauką į 40 ir stebėkite
Užsakant JSON kodą:
Funkcijos argumentas sort_keys atributas sąvartynuose () išrūšiuos raktą JSON didėjimo tvarka. Argumentas „sort_keys“ yra Būlo atributas. Kai tiesa, rūšiuoti leidžiama kitaip
Pavyzdys,
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)
Išvestis:
{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}
Kaip pastebėsite raktų amžių, automobiliai, vaikai ir kt. Išdėstomi didėjimo tvarka.
Kompleksinis „Python“ objektų kodavimas
Sudėtingas objektas turi dvi skirtingas dalis
- Tikroji dalis
- Įsivaizduojama dalis
Pavyzdys: 3 + 2i
Prieš atlikdami sudėtingo objekto kodavimą, turite patikrinti, ar kintamasis yra sudėtingas, ar ne. Turite sukurti funkciją, kuri tikrina kintamajame saugomą vertę naudodama egzemplioriaus metodą.
Sukurkime tam tikrą funkciją, kad patikrinimo objektas yra sudėtingas arba tinkamas koduoti.
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)
Išvestis:
'[4.0, 5.0]'
Kompleksinis JSON objektų dekodavimas „Python“
Norėdami iššifruoti sudėtingą objektą JSON, naudokite parametrą object_hook, kuris patikrina, ar JSON eilutėje yra sudėtingas objektas, ar ne. Pavyzdys,
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)
Išvestis:
Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}
JSON serializacijos klasės „JSONEncoder“ apžvalga
JSONEncoder klasė naudojama bet kurio „Python“ objekto serizavimui atliekant kodavimą. Jame yra trys skirtingi kodavimo metodai
- numatytasis (o) - įgyvendinamas poklasyje ir grąžina o objekto serijinį objektą.
- koduoti (o) - tas pats, kas metodas json.dumps (), pateikia „Python“ duomenų struktūros JSON eilutę.
- iterencode (o) - pavaizduokite eilutę po vieną ir užkoduokite objektą o.
JSONEncoder klasės encode () metodo pagalba taip pat galime užkoduoti bet kurį „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)
Išvestis:
'{"colour": ["red", "yellow", "green"]}'
JSON deserializacijos klasės „JSONDecoder“ apžvalga
JSONDecoder klasė naudojama deserializuoti bet kurį „Python“ objektą atliekant dekodavimą. Jame yra trys skirtingi dekodavimo metodai
- numatytasis (o) - įgyvendinamas poklasyje ir grąžina deserializuotą objektą o objektą.
- dekoduoti (o) - tas pats, kas metodas json.loads (), pateikia JSON eilutės arba duomenų „Python“ duomenų struktūrą.
- raw_decode (o) - pavaizduokite „ Python“ žodyną po vieną ir iššifruokite objektą o.
JSONDecoder klasės dekodavimo () metodo pagalba taip pat galime iššifruoti JSON eilutę.
import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)
Išvestis:
{'colour': ['red', 'yellow']}
JSON duomenų dekodavimas iš URL: realaus gyvenimo pavyzdys
Mes surinksime „CityBike NYC“ („Bike Sharing System“) duomenis iš nurodyto URL (https://feeds.citibikenyc.com/stations/stations.json) ir konvertuosime į žodyno formatą.
Pavyzdys,
PASTABA: - Įsitikinkite, kad užklausų biblioteka jau yra įdiegta jūsų „Python“. Jei ne, atidarykite terminalą arba CMD ir įveskite
- („Python 3“ ar naujesnėms versijoms) „ pip3“ diegimo užklausos
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])
Išvestis:
{'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': ''}
Išimtys, susijusios su JSON biblioteka „Python“:
- Json.JSONDecoderError klasė tvarko išimtį, susijusią su dekodavimo operacija. ir tai yra „ ValueError“ poklasis .
- Išimtis - json.JSONDecoderError (msg, doc)
- Išimties parametrai yra,
- msg - neformatuotas klaidos pranešimas
- doc - JSON dokumentai išanalizuoti
- pos - paleidimo dokumento rodyklė, kai nepavyksta
- lino - linija be laidų atitinka poz
- dvitaškis - stulpelis neatitinka poz
Pavyzdys,
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")
Begaliniai ir NaN skaičiai „Python“
„JSON Data Interchange Format“ (RFC - užklausa dėl komentarų) neleidžia „Infinite“ arba „Nan Value“, tačiau „Python-JSON“ bibliotekoje nėra jokių apribojimų atlikti su begalybe ir „Nan Value“ susijusias operacijas. Jei JSON gauna begalinį ir „Nan“ duomenų tipą, nei jis jį paverčia pažodiniu.
Pavyzdys,
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))
Išvestis:
InfinityNaNinf
Pakartotinis raktas JSON eilutėje
RFC nurodo, kad rakto pavadinimas turėtų būti unikalus JSON objekte, tačiau jis nėra privalomas. „Python JSON“ biblioteka nekelia JSON kartojamų objektų išimties. Neatsižvelgiama į visas pasikartojančias raktų ir verčių poras ir tarp jų laikoma tik paskutinė raktų ir verčių pora.
- Pavyzdys,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)
Išvestis:
{'a': 3}
CLI (komandų eilutės sąsaja) su JSON „Python“
„json.tool“ suteikia komandinės eilutės sąsają, leidžiančią patvirtinti JSON gražiojo spausdinimo sintaksę. Pažiūrėkime CLI pavyzdį
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Išvestis:
{"name": " Kings Authur "}
JSON „Python“ pranašumai
- Lengva grįžti tarp konteinerio ir vertės (JSON į Python ir Python į JSON)
- Žmogaus skaitomas (gana spausdintas) JSON objektas
- Plačiai naudojamas tvarkant duomenis.
- Vieno failo duomenų struktūra nėra tokia pati.
JSON įdiegimo apribojimas „Python“
- Deserializuojant JSON diapazoną ir numatant skaičių
- Didžiausias JSON eilutės ilgis ir JSON masyvai bei objekto lizdų lygiai.
Cheat Code
json.dumps (asmens_duomenys) |
Sukurkite JSON objektą |
json.dump (asmens duomenys, failo įrašymas) |
Sukurkite JSON failą naudodami „Python“ failų įvestis / išvestis |
compact_obj = json.dumps (duomenys, skyrikliai = (',', ':')) |
Suglaudinkite JSON objektą pašalindami tarpo simbolį iš JSON objekto naudodami separatorių |
formatted_obj = json.dumps (dic, įtrauka = 4, separatoriai = (',', ':')) |
JSON kodo formatavimas naudojant įtrauką |
sorted_string = json.dumps (x, įtrauka = 4, sort_keys = True) |
JSON objekto rakto rūšiavimas pagal abėcėlę |
complex_obj = json.dumps (4 + 5j, numatytasis = complex_encode) |
„Python Complex“ objektų kodavimas JSON |
JSONEncoder (). Koduoti (colour_dict) |
JSONEncoder klasės naudojimas serializavimui |
json.loads (duomenų_string) |
JSON eilutės dekodavimas „Python“ žodyne, naudojant funkciją json.loads () |
json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_compllex) |
Sudėtingo JSON objekto dekodavimas į „Python“ |
JSONDecoder (). Dekoduoti (colour_string) |
JSON dekodavimo „Python“ naudojimas su deserializavimu |