ЈСОН је популаран формат за размену података. Питхон се испоручује са уграђеним ЈСОН модулом за рашчлањивање и рад са ЈСОН подацима. А овај водич ће вас научити све о раду са ЈСОН-ом у Питхон-у.
До краја овог водича научићете:
- основе ЈСОН-а,
- како рашчланити и креирати ЈСОН стрингове у Питхон-у, и
- како читати и писати у ЈСОН датотеке у Питхон-у.
Почнимо!⏳
Преглед садржаја
Шта је ЈСОН?
ЈСОН је скраћеница од ЈаваСцрипт Објецт Нотатион, и то је формат заснован на тексту за размену података. Иако је ЈСОН у почетку инспирисан ЈаваСцрипт објектима, скоро сви програмски језици подржавају рад са ЈСОН-ом.
Ако сте икада радили са АПИ-јима или читали конфигурационе датотеке — вероватно бисте налетели на ЈСОН.
📑 Шаљете и примате податке у ЈСОН-у када постављате упите за АПИ-је. А ЈСОН се такође широко користи у комуникацији клијент-сервер у софтверским апликацијама. Поред тога, можете користити ЈСОН и за складиштење података опште намене.
Формат ЈСОН је веома сличан формату Питхон речника. Речници су моћне уграђене структуре података у Питхон-у које чувају податке у паровима кључ/вредност.
Пре него што наставимо даље, ево неколико тачака вредних пажње:
- У Питхон-у, ЈСОН објекат се чува као речник.
- Низ у ЈСОН-у се чува као Питхон листа.
- У ЈСОН-у, Булове вредности су означене као истините и нетачне. У Питхон-у, они се конвертују у Булове вредности Тачно и Нетачно.
За више детаља о типовима података који се преводе из ЈСОН у Питхон, прочитајте документе овде.
Пошто је јсон модул део Питхон стандардне библиотеке, не морате да га инсталирате. Можете да увезете у свој тренутни директоријум, овако:
import json
Како учитати ЈСОН стринг у Питхон-у
Општа синтакса за учитавање ЈСОН стринга у Питхон-у је:
<dict_obj> = json.loads(<json_str>)
овде,
- <дицт_обј> је Питхон речник у који желите да учитате ЈСОН стринг,
- <јсон_стр> је било који важећи ЈСОН стринг.
Ово учитава <јсон_стр> у Питхон речник <дицт_обј>.
Хајде да кодирамо пример. Овде јсон_стр је ЈСОН стринг.
json_str=""' { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ] } '''
А исечак кода испод показује како можете да учитате ЈСОН стринг јсон_стр у Питхон речник помоћу методе лоадс(). Можете користити уграђену функцију типе() да бисте проверили да ли је пи_дицт Питхон речник.
py_dict = json.loads(json_str) type(py_dict) # Output: dict print(py_dict) # Output {'books': [{'title': 'The Wind in the Willows', 'author': 'Kenneth Grahame', 'year': '1908'}, {'title': 'To the Lighthouse', 'author': 'Virginia Woolf', 'year': '1927'}]}
Као што је приказано у горњем коду, сва поља у ЈСОН стрингу су парови кључ-вредност у пи_дицт.
Како креирати ЈСОН стрингове у Питхон-у
Претпоставимо да имате Питхон речник. Дакле, како да креирате ЈСОН стринг од њега?
То можете учинити помоћу методе думпс() са овом синтаксом:
<json_str> = json.dumps(<dict_obj>)
овде,
- <дицт_обј> је Питхон речник из којег желите да креирате ЈСОН стринг,
- <јсон_стр> је резултујући ЈСОН стринг.
Дакле, метода думпс() думпује <дицт_обј> у ЈСОН стринг <јсон_стр>.
У наш постојећи Питхон речник пи_дицт. хајде да додамо нови кључ „филмови“. Можете то учинити као што је приказано у следећем исечку кода:
py_dict["movies"] = [{"title":"The Imitation Game","year":"2014", "lang":"en","watched":True}]
Сада, хајде да избацимо измењени речник у нови ЈСОН стринг јсон_стр2 користећи метод думпс().
json_str2 = json.dumps(py_dict) print(json_str2) # Output {"books": [{"title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908"}, {"title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927"}], "movies": [{"title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true}]}
Као што можете видети у горњем примеру, излазни ЈСОН стринг је тешко прочитати без одговарајућег форматирања. Можете користити опциони параметар индент да додате увлачење.
А то можете учинити тако што ћете поставити увлачење на цео број као што је 2, као што је приказано у наставку:
json_str2 = json.dumps(py_dict, indent = 2) print(json_str2) # Output { "books": [ { "title": "The Wind in the Willows", "author": "Kenneth Grahame", "year": "1908" }, { "title": "To the Lighthouse", "author": "Virginia Woolf", "year": "1927" } ], "movies": [ { "title": "The Imitation Game", "year": "2014", "lang": "en", "watched": true } ] }
Посматрајте како је излаз форматиран са увлачењем и лако га је пратити.
Напомена: 💡 Ако желите да кључеви буду сортирани по абецедном реду, можете да подесите параметар сорт_кеис на Тачно.
Као што можете видети у исечку кода испод, кључеви су сада поређани по абецедном реду.
json_str2 = json.dumps(py_dict, indent = 2, sort_keys=True) print(json_str2) # Output { "books": [ { "author": "Kenneth Grahame", "title": "The Wind in the Willows", "year": "1908" }, { "author": "Virginia Woolf", "title": "To the Lighthouse", "year": "1927" } ], "movies": [ { "lang": "en", "title": "The Imitation Game", "watched": true, "year": "2014" } ]
А кључеви се сада појављују по абецедном реду: „аутор“, „наслов“ и „година“.
До сада сте научили како да радите са ЈСОН стринговима у Питхон-у. У следећем одељку ћете научити како да радите са ЈСОН датотекама.
Како читати ЈСОН датотеку у Питхон-у
Да бисте прочитали ЈСОН датотеку у Питхон-у, користите следећу синтаксу:
json.load(<json-file>) # where <json-file> is any valid JSON file.
Обратите пажњу на то како користимо методу лоад(), а не методу лоадс(). лоадс() учитава ЈСОН стринг, док лоад() учитава ЈСОН датотеку.
Требало би да размислите о коришћењу менаџера контекста када радите са датотекама у Питхон-у. Такође можете покушати да прочитате датотеке на следећи начин, без коришћења менаџера контекста:
my_file = open('students.json','r') contents = my_file.read() print(contents) file.close()
Ако не затворите датотеку, може доћи до потенцијалног губитка ресурса.
Међутим, када радите са менаџерима контекста, датотеке се аутоматски затварају када се операције са датотекама заврше.
И можете користити менаџер контекста за читање датотека, као што је приказано у наставку:
with open('students.json','r') as file: data = json.load(file) print(data) # Output {'students': [{'roll_num': 'cs27', 'name': 'Anna', 'course': 'CS'}, {'roll_num': 'ep30', 'name': 'Kate', 'course': 'PHY'}]}
Док читате из датотеке, наведите режим као прочитан—означен са ‘р’ у горњем коду.
Напомена: Да бисте се лако кретали кроз тренутни директоријум, уверите се да је ЈСОН датотека у истој фасцикли као маин.пи, као што је приказано на слици испод. Ако је ваша ЈСОН датотека у другој фасцикли, обавезно наведите путању до датотеке.
Прочитајте ЈСОН датотеку у Питхон-у.
У следећем одељку ћете научити како да пишете у ЈСОН датотеку.✍
Како писати у ЈСОН датотеку у Питхон-у
Да бисте писали у постојећу ЈСОН датотеку или креирали нову ЈСОН датотеку, користите метод думп() као што је приказано:
json.dump(<dict_obj>,<json_file>) # where <dict_obj> is a Python dictionary # and <json_file> is the JSON file
Дакле, горња синтакса избацује речник <дицт_обј> у ЈСОН датотеку <јсон_филе>.
У претходном одељку имали смо речник пи_дицт. Хајде да то ставимо у нову ЈСОН датотеку. И назовимо га нев_филе.јсон.
А следећа ћелија кода показује како можете да користите функцију думп():
with open('new_file.json','w') as file: json.dump(py_dict,file)
Напомена: Отварање датотеке у режиму писања (в) преписује садржај ако датотека постоји. Ако датотека не постоји, датотека се креира.
Након извршавања горње ћелије кода, видећете да је нова ЈСОН датотека креирана у тренутном радном директоријуму. И можете наставити и испитати садржај ЈСОН датотеке.
Креирајте ЈСОН датотеку у Питхон-у
Приликом писања у датотеке, кључни циљ је складиштење података. А ако желите да сачувате форматирање, можете да користите и параметре индент и сорт_кеис.
Закључак
⏲ Време је за кратак резиме.
У овом туторијалу научили сте:
- основе коришћења ЈСОН-а,
- како користити методе лоадс() и лоад() за читање ЈСОН стринг и ЈСОН датотека, респективно,
- како да користите методе думпс() и думп() за думп Питхон речника у ЈСОН стрингове и ЈСОН датотеке.
Надам се да вам је овај водич био користан. Срећно учење!
Такође можете да погледате ЈСОН алатке за рашчлањивање, форматирање и валидацију.