Питхон ЈСОН: кодирање (думп), декодирање (учитавање) јсон Дата & амп; Датотека (пример)

Преглед садржаја:

Anonim

Шта је ЈСОН?

ЈСОН је стандардни формат за размену података, инспирисан ЈаваСцрипт-ом. Генерално, ЈСОН је у формату низа или текста. ЈСОН је скраћеница за Ј ава С црипт О бјецт Н отатион.

Синтакса ЈСОН: ЈСОН је написана као пар кључ и вредност.

{"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_obj Person… {'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"]}

Као што можете да приметите, старост кључева је да су аутомобили, деца итд. Поређани у растућем редоследу.

Сложено објектно кодирање Питхона

Сложени објекат има два различита дела тј

  1. Прави део
  2. Замишљени део

Пример: 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}', објецт_хоок = ис_цомплек)

Декодирање сложеног ЈСОН објекта у Питхон

ЈСОНДецодер (). Декодирање (боја_низ)

Употреба декодирања ЈСОН-а на Питхон са десеријализацијом