Робота з файлами у форматі JSON#
JSON (JavaScript Object Notation) - це текстовий формат для зберігання та обміну даними.
JSON синтаксису дуже схожий на Python і досить зручний для сприйняття.
Як і у випадку з CSV, у Python є модуль, який дозволяє легко записувати та читати дані у форматі JSON.
Читання#
"access":
[
"switchport mode access",
"switchport access vlan",
"switchport nonegotiate",
"spanning-tree portfast",
"spanning-tree bpduguard enable"
],
"trunk":
[
"switchport trunk encapsulation dot1q",
"switchport mode trunk",
"switchport trunk native vlan 999",
"switchport trunk allowed vlan"
]
>
Для читання в модулі json є два методи:
- json.load - метод зчитує файл у форматі JSON та повертає об'єкти Python
- json.loads - метод зчитує рядок у форматі JSON та повертає об'єкти Python
json.load #
Читання файлу JSON в об'єкт Python (файл json_read_load.py):
import
json
with
open('sw_templates.json')
as
f:
templates
=
json.load(f)
print(templates)
for
section,
commands
in
templates.items():
print(section)
print('\n'.join(commands))
$ python json_read_load.py access switchport mode access switchport access vlan switchport nonegotiate spanning-tree portfast spanning-tree bpduguard enable trunk switchport trunk encapsulation dot1q switchport mode trunk switch trunk allowed vlan
json.loads #
Зчитування рядка у форматі JSON в об'єкт Python (файл json_read_loads.py):
import
json
with
open('sw_templates.json')
as
f:
file_content
=
f.read()
templates
=
json.loads(file_content)
print(templates)
for
section,
commands
in
templates.items():
print(section)
print('\n'.join(commands))
Результат буде аналогічним до попереднього висновку.
Запис#
Запис файлу у форматі JSON також здійснюється досить легко.
Для запису інформації у форматі JSON у модулі json також є два методи:
- json.dump - метод записує об'єкт Python у файл у форматі JSON
- json.dumps - метод повертає рядок у форматі JSON
json.dumps #
Перетворення об'єкта на рядок у форматі JSON (json_write_dumps.py):
import
json
trunk_template
=
[
'switchport trunk encapsulation dot1q',
'switchport mode trunk',
'switchport trunk native vlan 999',
'switchport trunk allowed vlan'
]
access_template
=
[
'switchport mode access',
'switchport access vlan',
'switchport nonegotiate',
'spanning-tree portfast',
'spanning-tree bpduguard enable'
]
to_json
=
'trunk':
trunk_template,
'access':
access_template>
with
open('sw_templates.json',
'w')
as
f:
f.write(json.dumps(to_json))
with
open('sw_templates.json')
as
f:
print(f.read())
Метод json.dumps підходить для ситуацій, коли треба повернути рядок у форматі JSON. Наприклад, щоб передати її API.
json.dump #
Запис об'єкта Python у файл у форматі JSON (файл json_write_dump.py):
import
json
trunk_template
=
[
'switchport trunk encapsulation dot1q',
'switchport mode trunk',
'switchport trunk native vlan 999',
'switchport trunk allowed vlan'
]
access_template
=
[
'switchport mode access',
'switchport access vlan',
'switchport nonegotiate',
'spanning-tree portfast',
'spanning-tree bpduguard enable'
]
to_json
=
'trunk':
trunk_template,
'access':
access_template>
with
open('sw_templates.json',
'w')
as
f:
json.dump(to_json,
f)
with
open('sw_templates.json')
as
f:
print(f.read())
Коли потрібно записати інформацію у форматі JSON у файл, краще використати метод dump.
Додаткові параметри методів запису
Методам dump та dumps можна передавати додаткові параметри для керування форматом виводу.
За замовчуванням ці методи записують інформацію у компактному поданні. Як правило, коли дані використовуються іншими програмами, візуальне подання даних не має значення. Якщо ж дані у файлі потрібно вважати людині, такий формат не дуже зручно сприймати.
На щастя, модуль JSON дозволяє керувати подібними речами.
Передавши додаткові параметри методу dump (або методу dumps), можна отримати зручніший для читання висновок (файл json_write_indent.py):
import
json
trunk_template
=
[
'switchport trunk encapsulation dot1q',
'switchport mode trunk',
'switchport trunk native vlan 999',
'switchport trunk allowed vlan'
]
access_template
=
[
'switchport mode access',
'switchport access vlan',
'switchport nonegotiate',
'spanning-tree portfast',
'spanning-tree bpduguard enable'
]
to_json
=
'trunk':
trunk_template,
'access':
access_template>
with
open('sw_templates.json',
'w')
as
f:
json.dump(to_json,
f,
sort_keys=True,
indent=2)
with
open('sw_templates.json')
as
f:
print(f.read())
Тепер вміст файлу sw_templates.json виглядає так:
"access":
[
"switchport mode access",
"switchport access vlan",
"switchport nonegotiate",
"spanning-tree portfast",
"spanning-tree bpduguard enable"
],
"trunk":
[
"switchport trunk encapsulation dot1q",
"switchport mode trunk",
"switchport trunk native vlan 999",
"switchport trunk allowed vlan"
]
>
Зміна типу даних
Ще один важливий аспект перетворення даних у форматі JSON: дані не завжди будуть того ж типу, що вихідні дані в Python.
Наприклад, кортежі під час запису в JSON перетворюються на списки:
In [1]: import json In [2]: trunk_template = ('switchport trunk encapsulation dot1q', . 'switchport mode trunk', . 'switchport trunk native vlan 999', . : print(type(trunk_template)) In [4]: with open('trunk_template.json', 'w') as f: . json.dump(trunk_template, f, sort_keys=True, indent=2) . In [5]: cat trunk_template.json [ "switchport trunk encapsulation dot1q", "switchport mode trunk", "switchport trunk native vlan 999", "switchport trunk allowed vlan" ] In [6]: templates = json ('trunk_template.json')) In [7]: type(templates) Out[7]: list In [8]: print(templates) ['switchport trunk encapsulation dot1q', 'switchport mode trunk', 'switchport trunk native vlan 999', 'switchport trunk allowed vlan']
Так відбувається через те, що в JSON використовуються інші типи даних і не для всіх типів даних Python є відповідність.
Таблиця конвертації даних Python у JSON:
Як створити JSON-файл у Python
JSON (JavaScript Object Notation) – це формат обміну даними, який широко використовується для зберігання та передачі інформації. Він дозволяє структурувати дані у вигляді об'єктів та масивів, що робить його зручним для роботи з різними мовами програмування, включаючи Python. Для створення JSON-файлу в Python нам знадобиться модуль json, який постачається разом із мовою.
Крок 1: Імпорт модуля json
Перед початком створення JSON-файлу ми повинні імпортувати модуль json. Для цього додайте наступний рядок на початок вашого коду:
Крок 2: Створення даних для JSON
Тепер, коли ми імпортували модуль json, давайте визначимо дані, які хочемо зберегти в JSON форматі. У Python, дані для JSON зазвичай є словником або списком.
Приклад 1: Створення JSON зі словника
Ми можемо перетворити цей словник на JSON за допомогою функції json.dumps(). Ось приклад коду:
json_data = json.dumps(person)
Тепер змінна json_data містить JSON-подання словника person.
Приклад 2: Створення JSON зі списку об'єктів
Тепер припустимо, що ми маємо список об'єктів, що представляють продукти:
Аналогічно попередньому прикладу, ми можемо перетворити список об'єктів у JSON за допомогою функції json.dumps():
json_data = json.dumps(products)
Крок 3: Запис даних у файл
Тепер, коли ми маємо JSON-представлення наших даних, ми можемо записати його у файл. Для цього скористаємося функцією write() об'єкт файлу.
Приклад: Запис JSON у файл
Припустимо, ми хочемо зберегти JSON-дані у файл під назвою "data.json". Ми можемо зробити це так:
with open("data.json", "w") as file: file.write(json_data)
Висновок
Тепер ви знаєте, як створити JSON-файл у Python. Використовуючи модуль json, ми можемо перетворювати словники та списки на JSON і записувати їх у файли. Це корисна техніка для зберігання та передачі даних між програмами.