Шта је ЈСОН?
ЈСОН је стандардни формат за размену података, инспирисан ЈаваСцрипт-ом. Генерално, ЈСОН је у формату низа или текста. ЈСОН је скраћеница за Ј ава С црипт О бјецт Н отатион.
Синтакса ЈСОН: ЈСОН је написана као пар кључ и вредност.
{"Key": "Value","Key": "Value",}
ЈСОН је врло сличан Питхон речнику. Питхон подржава ЈСОН и има уграђену библиотеку као ЈСОН.
ЈСОН библиотека на Питхону
' марсхал ' и ' пицкле' спољни модули Питхона одржавају верзију ЈСОН библиотеке. Да бисте извршили операције повезане са ЈСОН-ом попут кодирања и декодирања у Питхону, прво морате да увезете ЈСОН библиотеку, а за то у своју .пи датотеку
import json
Следеће методе су доступне у ЈСОН модулу
Метод | Опис |
---|---|
депоније () | кодирање у ЈСОН објекте |
Депонија() | кодирано писање низа у датотеку |
оптерећења () | Декодирајте ЈСОН низ |
лоад () | Декодирање током читања ЈСОН датотеке |
Питхон у ЈСОН (кодирање)
ЈСОН библиотека Питхона подразумевано врши следећи превод Питхон објеката у ЈСОН објекте
Питхон | ЈСОН |
дицт | Предмет |
листа | Арраи |
уницоде | Низ |
број - инт, дугачак | број - међ |
пловак | број - стваран |
Истинито | Истинито |
Нетачно | Нетачно |
Ниједан | Нула |
Претварање Питхон података у ЈСОН назива се операција кодирања. Кодирање се врши помоћу ЈСОН методе библиотеке - думпс ()
думпс () метода претвара речнички објекат питхона у формат ЈСОН стринг података.
Сада допуштамо да изведемо први пример кодирања са Питхоном.
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)
Излаз:
{"person": {"name": "Kenn", "sex": "male", "age": 28}})
Направимо ЈСОН датотеку речника користећи исту функцију думп ()
# 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)
Излаз:
Нема шта да се покаже
… У вашем систему је креиран јсон_филе.јсон који можете да проверите ту датотеку.ЈСОН у Питхон (декодирање)
ЈСОН ниска декодирање се врши уз помоћ уграђених метода оптерећења () & лоад () у ЈСОН библиотеке у Питхон. Овде табела превода приказује примере ЈСОН објеката на Питхон објекте који су корисни за извршавање декодирања у Питхону ЈСОН низа.
ЈСОН | Питхон |
Предмет | дицт |
Арраи | листа |
Низ | уницоде |
број - међ | број - инт, дугачак |
број - стваран | пловак |
Истинито | Истинито |
Нетачно | Нетачно |
Нула | Ниједан |
Погледајмо основни пример декодирања у Питхону уз помоћ функције јсон.лоадс () ,
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'))
Излаз:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_objPerson… {'name': 'John', 'sex': 'male'}
Декодирање ЈСОН датотеке или рашчлањивање ЈСОН датотеке у Питхону
НАПОМЕНА: Декодирање ЈСОН датотеке је везана за улаз / излаз датотеке (И / О). ЈСОН датотека мора постојати у вашем систему на одређеној локацији коју помињете у програму.
Пример,
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)
Овде су подаци речнички објекат Питхона.
Излаз:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Компактно кодирање у Питхону
Када треба да смањите величину ЈСОН датотеке, можете да користите компактно кодирање у Питхону.
Пример,
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)
Излаз:
'["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 **
Формат ЈСОН кода (прилично штампан)
- Циљ је писање добро обликованог кода за људско разумевање. Уз помоћ лепог штампања, свако може лако да разуме код.
- Пример,
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)
Излаз:
{"a" : 4,"b" : 5}
Да бисте ово боље разумели, промените увлаку на 40 и посматрајте излаз-
Наручивање ЈСОН кода:
атрибут сорт_кеис у аргументу думпс () функције сортират ће кључ у ЈСОН-у у растућем редослиједу. Аргумент сорт_кеис је логички атрибут. Када је тачно сортирање је дозвољено, иначе није
Пример,
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)
Излаз:
{"age": 45,"cars": [ {"model": "Audi A1","mpg": 15.1},{"model": "Zeep Compass","mpg": 18.1}],"children": [ "Alice","Bob"],"married": true,"name": "Ken","pets": ["Dog"]}
Као што можете да приметите, старост кључева је да су аутомобили, деца итд. Поређани у растућем редоследу.
Сложено објектно кодирање Питхона
Сложени објекат има два различита дела тј
- Прави део
- Замишљени део
Пример: 3 + 2и
Пре извођења кодирања сложеног објекта, потребно је да проверите да ли је променљива сложена или не. Треба да креирате функцију која проверава вредност сачувану у променљивој помоћу методе инстанце.
Створимо специфичну функцију за објекат провере сложену или прихватљиву за кодирање.
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)
Излаз:
'[4.0, 5.0]'
Сложено ЈСОН декодирање објеката у Питхону
За декодирање сложеног објекта у ЈСОН-у користите параметар објецт_хоок који проверава да ли ЈСОН низ садржи сложени објекат или не. Пример,
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)
Излаз:
Complex_object… (4+5j)Without_complex_object… {'real': 6, 'img': 7}
Преглед ЈСОН класе сериализације ЈСОНЕнцодер
Класа ЈСОНЕнцодер се користи за сериализацију било ког Питхон објекта током извођења кодирања. Садржи три различите методе кодирања које су
- дефаулт (о) - Имплементирано у подкласи и враћа сериализује објекат за о објекат.
- енцоде (о) - Исто као и метода јсон.думпс () враћа ЈСОН низ Питхон структуре података.
- итеренцоде (о) - Представљају низ један по један и кодирају објекат о.
Уз помоћ методе енцоде () класе ЈСОНЕнцодер, такође можемо кодирати било који Питхон објекат.
# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)
Излаз:
'{"colour": ["red", "yellow", "green"]}'
Преглед ЈСОН класе десеријализације ЈСОНДецодер
Класа ЈСОНДецодер се користи за десериализацију било ког Питхон објекта током извођења декодирања. Садржи три различите методе декодирања које су
- дефаулт (о) - Имплементирано у поткласи и враћа десериализовани објект о објект.
- децоде (о) - Исто као и метода јсон.лоадс () враћа Питхон структуру података ЈСОН низа или података.
- рав_децоде (о) - представљају Питхон речник један по један и декодирају објекат о.
Помоћу методе децоде () класе ЈСОНДецодер такође можемо декодирати ЈСОН низ.
import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)
Излаз:
{'colour': ['red', 'yellow']}
Декодирање ЈСОН података из УРЛ-а: Пример из стварног живота
Преузећемо податке ЦитиБике НИЦ (Бике Схаринг Систем) са наведеног УРЛ-а (хттпс://феедс.цитибикениц.цом/статионс/статионс.јсон) и претворити у формат речника.
Пример,
НАПОМЕНА: - Уверите се да је библиотека захтева већ инсталирана у вашем Питхону, ако не, отворите Терминал или ЦМД и укуцајте
- (За Питхон 3 или новији) пип3 захтеви за инсталацију
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])
Излаз:
{'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': ''}
Изузеци повезани са ЈСОН библиотеком у Питхону:
- Класа јсон.ЈСОНДецодерЕррор обрађује изузетак везан за операцију декодирања. и то је подкласа ВалуеЕррор.
- Изузетак - јсон.ЈСОНДецодерЕррор (мсг, доц)
- Параметри изузетка су,
- мсг - Неформатирана порука о грешци
- доц - ЈСОН документи су рашчлањени
- поз - индекс почетка док док не успе
- линено - линија нема емисија које одговарају поз
- дебело црево - колона но не одговара поз
Пример,
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")
Бесконачни и НаН бројеви у Питхону
ЈСОН формат размене података (РФЦ - Захтев за коментаре) не дозвољава бесконачну вредност или вредност Нан-а, али у Питхон-ЈСОН библиотеци нема ограничења за обављање операција у вези са бесконачношћу и вредностима Нан-а. Ако ЈСОН добије ИНФИНИТЕ и Нан тип података, претворио га је у дословни.
Пример,
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))
Излаз:
InfinityNaNinf
Поновљени кључ у ЈСОН стрингу
РФЦ наводи да би име кључа требало да буде јединствено у ЈСОН објекту, али није обавезно. Питхон ЈСОН библиотека не покреће изузетак поновљених објеката у ЈСОН-у. Занемарује све поновљене парове кључ / вредност и узима у обзир само последњи пар кључ / вредност.
- Пример,
import jsonrepeat_pair = '{"a": 1, "a": 2, "a": 3}'json.loads(repeat_pair)
Излаз:
{'a': 3}
ЦЛИ (интерфејс командне линије) са ЈСОН-ом у Питхону
јсон.тоол пружа интерфејс командне линије за потврду ЈСОН-ове синтаксе прилично штампања. Погледајмо пример ЦЛИ
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Излаз:
{"name": " Kings Authur "}
Предности ЈСОН-а у Питхону
- Једноставно враћање између контејнера и вредности (ЈСОН на Питхон и Питхон на ЈСОН)
- Читав за људе (прилично штампан) ЈСОН објекат
- Широко се користи у руковању подацима.
- Нема исту структуру података у једној датотеци.
Ограничење примене ЈСОН-а у Питхон-у
- У десериализатору ЈСОН опсега и предвиђању броја
- Максимална дужина ЈСОН низа и низова ЈСОН-а и нивои угнежђења објекта.
Цхеат Цоде
јсон.думпс (персон_дата) |
Направите ЈСОН објекат |
јсон.думп (персон_дата, филе_врите) |
Направите ЈСОН датотеку користећи И / О датотеке Питхона |
цомпацт_обј = јсон.думпс (подаци, сепаратори = (',', ':')) |
Компактни ЈСОН објекат уклањањем размака из ЈСОН објекта помоћу сепаратора |
форматтед_обј = јсон.думпс (диц, индент = 4, сепараторс = (',', ':')) |
Форматирање ЈСОН кода помоћу увлачења |
сортед_стринг = јсон.думпс (к, увлака = 4, сорт_кеис = Труе) |
Сортирање кључа објекта ЈСОН по абецедном реду |
цомплек_обј = јсон.думпс (4 + 5ј, подразумевано = цомплек_енцоде) |
Питхон Цомплек Објецт енцодинг у ЈСОН-у |
ЈСОНЕнцодер (). Енцоде (цолоур_дицт) |
Употреба класе ЈСОНЕнцодер за сериализацију |
јсон.лоадс (дата_стринг) |
Декодирање ЈСОН низа у Питхон речнику помоћу функције јсон.лоадс () |
јсон.лоадс ('{"__ цомплек__": труе, "реал": 4, "имг": 5}', објецт_хоок = ис_цомплек) |
Декодирање сложеног ЈСОН објекта у Питхон |
ЈСОНДецодер (). Декодирање (боја_низ) |
Употреба декодирања ЈСОН-а на Питхон са десеријализацијом |