Како рашчланити ЈСОН у Питхон-у

ЈСОН је популаран формат за размену података. Питхон се испоручује са уграђеним ЈСОН модулом за рашчлањивање и рад са ЈСОН подацима. А овај водич ће вас научити све о раду са ЈСОН-ом у Питхон-у.

До краја овог водича научићете:

  • основе ЈСОН-а,
  • како рашчланити и креирати ЈСОН стрингове у Питхон-у, и
  • како читати и писати у ЈСОН датотеке у Питхон-у.

Почнимо!⏳

Шта је ЈСОН?

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

Ако сте икада радили са АПИ-јима или читали конфигурационе датотеке — вероватно бисте налетели на ЈСОН.

📑 Шаљете и примате податке у ЈСОН-у када постављате упите за АПИ-је. А ЈСОН се такође широко користи у комуникацији клијент-сервер у софтверским апликацијама. Поред тога, можете користити ЈСОН и за складиштење података опште намене.

Формат ЈСОН је веома сличан формату Питхон речника. Речници су моћне уграђене структуре података у Питхон-у које чувају податке у паровима кључ/вредност.

Пре него што наставимо даље, ево неколико тачака вредних пажње:

  • У Питхон-у, ЈСОН објекат се чува као речник.
  • Низ у ЈСОН-у се чува као Питхон листа.
  • У ЈСОН-у, Булове вредности су означене као истините и нетачне. У Питхон-у, они се конвертују у Булове вредности Тачно и Нетачно.

За више детаља о типовима података који се преводе из ЈСОН у Питхон, прочитајте документе овде.

Пошто је јсон модул део Питхон стандардне библиотеке, не морате да га инсталирате. Можете да увезете у свој тренутни директоријум, овако:

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)

Напомена: Отварање датотеке у режиму писања (в) преписује садржај ако датотека постоји. Ако датотека не постоји, датотека се креира.

Након извршавања горње ћелије кода, видећете да је нова ЈСОН датотека креирана у тренутном радном директоријуму. И можете наставити и испитати садржај ЈСОН датотеке.

Креирајте ЈСОН датотеку у Питхон-у

Приликом писања у датотеке, кључни циљ је складиштење података. А ако желите да сачувате форматирање, можете да користите и параметре индент и сорт_кеис.

Закључак

⏲ ​​Време је за кратак резиме.

У овом туторијалу научили сте:

  • основе коришћења ЈСОН-а,
  • како користити методе лоадс() и лоад() за читање ЈСОН стринг и ЈСОН датотека, респективно,
  • како да користите методе думпс() и думп() за думп Питхон речника у ЈСОН стрингове и ЈСОН датотеке.

Надам се да вам је овај водич био користан. Срећно учење!

Такође можете да погледате ЈСОН алатке за рашчлањивање, форматирање и валидацију.