Въведение в JSON обектите в Python

Java Script Object Notation (JSON) е лек формат на данни с много прилики с речниците на Python. JSON обектите са полезни, защото браузърите могат бързо да ги анализират, което е идеално за транспортиране на данни между клиент и сървър. В тази публикация ще обсъдим как да използваме JSON библиотеката на python за изпращане и получаване на JSON данни.

Да започваме!

Първо, нека проверим следния JSON пакет с информация за албума на The Beatle Yellow Submarine:

{
     "album_title" : "Yellow Submarine",     
     "release_year" : 1966,   
     "won_grammy" : false,
     "band" : "The Beatles",
     "album_sale": null
     "musicians" : ["John Lennon", "Paul McCartney", "George   Harrison", "Ringo Starr"],
     "studio" : {"studio_name": "Abbey Road Studios", "location": "London, England"}
     }

В JSON обектите ключовете са низове и стойностите могат да бъдат низове, числа (float или int), булеви стойности, списъци, null или друг JSON обект. Има няколко разлики между речниците на Python и JSON обектите, които могат да се видят от този пример. Например булевите стойности са с малки букви, а стойностите „Няма“ са „нулеви“. Еквивалентът на речника на Python е:

{
     "album_title" : "Yellow Submarine",     
     "release_year" : 1966,   
     "won_grammy" : False,
     "band" : "The Beatles",
     "album_sale": None
     "musicians" : ["John Lennon", "Paul McCartney", "George   Harrison", "Ringo Starr"],
     "studio" : {"studio_name": "Abbey Road Studios", "location": "London, England"}
     }

Сега нека запазим примерните JSON данни в текстов файл, наречен „album.txt“. Направих това с помощта на командния ред на терминала и текстовия редактор „vim“, но можете да използвате всеки инструмент, който искате. След това, в скрипт на Python, нека импортираме JSON модула:

import json

Нека да разгледаме наличните методи в този модул с помощта на метода „dir()“:

print(dir(json))

Ще се фокусираме върху методите за зареждане и изхвърляне. За да продължите, нека използваме отворения метод, за да отворим файла. В отворения метод нека посочим името на файла, „album.txt“ и режима (четене или запис). Ще четем файла, така че режимът е „r“:

album_json_file = open("album.txt", "r")

След това можем да използваме метода за зареждане, за да заредим JSON данните от нашия файл:

album = json.load(album_json_file)

След като заредим JSON данните, затваряме файла:

album_json_file.close()

Вече можем да отпечатаме нашите заредени JSON данни:

print(album)

Ако отпечатаме типа на този обект, ще видим, че това е речник на Python:

print(type(album))

Нека да разгледаме разликите между JSON обекта и речника на python. Стойността „won_grammy“ в JSON обекта е „false“, докато в речника е „False“ с главна буква. Освен това ‘album_sale’ ‘стойността Null’ беше анализирана като ‘Няма’ в речника на Python.

Сега, след като заредихме нашите данни като речник, можем да получим достъп до стойностите в анализирания речник по ключ. Например, ако искаме да имаме достъп до „album_title“, правим следното:

print("Album Title: ", album['album_title'])

Или ако искаме да имаме достъп до годината на издаване на албума:

print("Release Year: ", album['release_year'])

В клиентските сървърни приложения е обичайно JSON обектите да пристигат под формата на низове. Например нашият JSON обект за информация за албум може да изглежда така:

album_string = """{"album_title" : "Yellow Submarine",
     "release_year" : 1966,
     "won_grammy" : false,
     "band" : "The Beatles",
     "album_sale": null,
     "musicians" : ["John Lennon", "Paul McCartney", "George   Harrison", "Ringo Starr"],
     "studio" : {"studio_name": "Abbey Road Studios", "location": "London, England"}
     }"""

За да заредим тези данни с помощта на JSON модула, използваме метода „loads()“:

album_s = json.loads(album_string)
album_string.close()
print(album_s)

Сега да предположим, че започваме с данни, форматирани в речник, и искаме да изпратим тези данни към база данни във формат JSON. Можем да използваме методите dumps, за да конвертираме речници в низови JSON обекти. Нека дефинираме нашия оригинален речник:

album2 = {'album_title': 'Yellow Submarine', 'release_year': 1966, 'won_grammy': False, 
 'band': 'The Beatles', 'album_sale': None, 'musicians': ['John Lennon', 'Paul McCartney', 'George   Harrison', 'Ringo Starr'], 
 'studio': {'studio_name': 'Abbey Road Studios', 'location': 'London, England'}}

След това нека отпечатаме низовия JSON обект, използвайки метода dumps:

print(json.dumps(album2))
print(type(json.dumps(album2)))

Нашият речник беше правилно анализиран като низ JSON обект. Виждаме, че стойността на ‘album_sale’, ‘None’, вече е ‘null’, а стойността ‘won_grammy’, ‘False’, вече е ‘false’.

И накрая, можем да напишем този JSON обект във файл „.txt“, като използваме метода dump:

file2 = open("album2.txt", "w")
json.dump(album2, file2)

Ще спра дотук, но не се колебайте сами да си поиграете с кода.

ИЗВОДИ

За да обобщим, в тази публикация обсъдихме как да изпращаме и получаваме JSON данни с помощта на JSON библиотеката на python. Обсъдихме методите за зареждане, които ни помагат да получаваме данни и методите за изхвърляне, които ни помагат да изпращаме данни. Ако се интересувате да научите повече за работата с JSON обекти в Python, препоръчвам „уроците на Socratica в YouTube“. Надявам се, че сте намерили тази публикация за полезна/интересна. Кодът от тази публикация е достъпен в GitHub. Благодаря ви, че прочетохте!