Python JSON: кодування (дамп), декодування (завантаження) і читання файлу JSON
Що таке JSON Python?
JSON in Python є стандартним форматом, натхненним JavaСценарій для обміну даними та передачі даних у текстовому форматі по мережі. Як правило, JSON має рядковий або текстовий формат. Він може використовуватися API та базами даних, і він представляє об’єкти як пари ім’я/значення. JSON означає JavaНотація об’єкта сценарію.
Python Синтаксис JSON:
JSON записується як пара ключів і значень.
{ "Key": "Value", "Key": "Value", }
JSON дуже схожий на Python словник. Python підтримує JSON і має вбудовану бібліотеку JSON.
Бібліотека JSON в Python
"маршал'І'маринований огірок зовнішні модулі Python підтримувати версію JSON Python бібліотека. Робота з JSON в Python для виконання пов’язаних з JSON операцій, таких як кодування та декодування, вам потрібно спочатку імпорт Бібліотека JSON і для цього у вашому .py файл,
import json
У JSON доступні такі методи Python Модулі
Метод | Опис |
---|---|
звалища() | кодування в об’єкти JSON |
dump() | запис закодованого рядка у файл |
навантаження() | Декодуйте рядок JSON |
навантаження () | Декодувати під час читання файлу JSON |
Python в JSON (кодування)
JSON Бібліотека с Python виконує наступний переклад Python об’єктів в об’єкти JSON за замовчуванням
Python | JSON |
---|---|
диктує | Об'єкт |
список | масив |
Unicode | рядок |
число – int, long | число – внутр |
плавати | число – реальне |
Правда | Правда |
Помилковий | Помилковий |
ніхто | Null |
Перетворення Python даних у JSON називається операцією кодування. Кодування здійснюється за допомогою методу бібліотеки JSON – звалища()
JSON dumps() в Python
json.dumps () in Python це метод, який перетворює об’єкти словника Python у формат рядкових даних JSON. Це корисно, коли потрібно, щоб об’єкти були у форматі рядка для таких операцій, як аналіз, друк тощо.
Тепер давайте виконаємо наш перший приклад кодування json.dumps Python:
import json x = { "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}})
Давайте подивимося на прикладі Python записати JSON у файл для створення JSON-файлу словника за допомогою тієї ж функції dump()
# here we create new data_file.json file with write mode using file i/o operation with open('json_file.json', "w") as file_write: # write json data into file json.dump(person_data, file_write)
вихід:
Нічого для показу… У вашій системі створено json_file.json. Ви можете перевірити цей файл, як показано нижче, запис JSON у файл Python приклад.
JSON до Python (розшифровка)
Декодування рядка JSON виконується за допомогою вбудованого методу json.loads() & json.load() бібліотеки JSON в Python. Тут таблиця перекладу показує приклад об’єктів JSON Python об'єкти які корисні для виконання декодування Python рядка JSON.
JSON | Python |
---|---|
Об'єкт | диктує |
масив | список |
рядок | Unicode |
число – внутр | число – int, long |
число – реальне | плавати |
Правда | Правда |
Помилковий | Помилковий |
Null | ніхто |
Давайте подивимося на базовий аналіз JSON Python приклад розшифровки за допомогою json.loads функція
import json # json library imported # json data string person_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_obj print("Type of dict_obj", type(dict_obj)) # get human object details print("Person......", dict_obj.get('person'))
вихід:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}} Type of dict_obj <class 'dict'> Person...... {'name': 'John', 'sex': 'male'}
Декодування файлу JSON або аналіз файлу JSON Python
Тепер ми навчимося читати файл JSON Python з Python приклад аналізу JSON:
ПРИМІТКА: Декодування файлу JSON пов’язано з операцією введення/виведення (I/O). Файл JSON має існувати у вашій системі у вказаному місці, яке ви згадуєте у своїй програмі.
Python читати файл JSON Приклад:
import json #File I/O Open function for read data from JSON File with open('X:/json_file.json') as file_object: # store file data in object data = json.load(file_object) print(data)
Ось дані є словниковим об’єктом Python як показано у файлі JSON для читання вище Python приклад.
вихід:
{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Компактне кодування в Python
Якщо вам потрібно зменшити розмір файлу JSON, ви можете використовувати компактне кодування Python.
Наприклад,
import json # Create a List that contains dictionary lst = ['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 dictionary compact_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 **
Формат коду JSON (гарний друк)
- Мета — написати добре відформатований код для розуміння людиною. Завдяки гарному друку кожен може легко зрозуміти код.
приклад:
import json dic = { '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 і спостерігайте за результатом
Замовлення коду JSON:
ключі_сортування атрибут в Python аргумент функції dumps сортує ключ у JSON у порядку зростання. Аргумент sort_keys є логічним атрибутом. Якщо це правда, сортування дозволено, інакше ні. Давайте розберемося з Python приклад сортування рядка до JSON.
Наприклад,
import json x = { "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" ] }
Як ви можете помітити, вік ключів, автомобілі, діти тощо розташовані в порядку зростання.
Комплексне кодування об'єктів Python
Комплексний об’єкт складається з двох різних частин
- Реальна частина
- Уявна частина
Приклад: 3 +2i
Перш ніж виконувати кодування складного об'єкта, потрібно перевірити, складна чи ні змінна. Вам потрібно створити функцію, яка перевіряє значення, збережене в змінній, за допомогою методу екземпляра.
Давайте створимо спеціальну функцію для перевірки об’єкта на складність або придатність для кодування.
import json # create function to check instance is complex or not def complex_encode(object): # check using isinstance method if isinstance(object, complex): return [object.real, object.imag] # raised error using exception handling if object is not complex raise TypeError(repr(object) + " is not JSON serialized") # perform json encoding by passing parameter complex_obj = json.dumps(4 + 5j, default=complex_encode) print(complex_obj)
вихід:
'[4.0, 5.0]'
Комплексне декодування об'єктів JSON в Python
Щоб декодувати складний об’єкт у JSON, використовуйте параметр object_hook, який перевіряє, чи містить рядок JSON складний об’єкт чи ні. Давайте розберемося з рядком у JSON Python Наприклад,
import json # function check JSON string contains complex object def 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 not complex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex) #here we not passed complex object so it's convert into dictionary simple_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}
Огляд класу серіалізації JSON JSONEncoder
Клас JSONEncoder використовується для серіалізації будь-яких Python під час виконання кодування. Він містить три різні методи кодування, які є
- за замовчуванням(о) – Реалізовано в підкласі та повертає об’єкт серіалізації для o об'єкт
- кодувати (о) – Те саме, що й дампи JSON Python метод повертає рядок JSON Python структура даних.
- iterencode(o) – Представлення рядка один за одним і кодування об’єкта o.
За допомогою методу encode() класу JSONEncoder ми також можемо закодувати будь-який Python об’єкт, як показано нижче Python Приклад кодера JSON.
# import JSONEncoder class from json from json.encoder import JSONEncoder colour_dict = { "colour": ["red", "yellow", "green" ]} # directly called encode method of JSON JSONEncoder().encode(colour_dict)
вихід:
'{"colour": ["red", "yellow", "green"]}'
Огляд класу десеріалізації JSON JSONDecoder
Клас JSONDecoder використовується для десеріалізації будь-якого Python під час виконання декодування. Він містить три різні методи декодування, які є
- за замовчуванням(о) – Реалізовано в підкласі та повертає десеріалізований об’єкт o об'єкт
- декодувати(о) – Те саме, що повернення методу json.loads(). Python структура даних рядка JSON або даних.
- raw_decode(o) – Представляти Python словник один за одним і декодувати об’єкт o.
За допомогою методу decode() класу JSONDecoder ми також можемо декодувати рядок JSON, як показано нижче Python Приклад декодера JSON.
import json # import JSONDecoder class from json from json.decoder import JSONDecoder colour_string = '{ "colour": ["red", "yellow"]}' # directly called decode method of JSON JSONDecoder().decode(colour_string)
вихід:
{'colour': ['red', 'yellow']}
Декодування даних JSON з URL: реальний приклад
Ми отримаємо дані CityBike NYC (система спільного використання велосипедів) із зазначеної URL-адреси (https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) і конвертувати у формат словника.
Python завантажити JSON з файлу Приклад:
ПРИМІТКА. Переконайтеся, що бібліотеку запитів уже встановлено у вашому PythonЯкщо ні, відкрийте термінал або CMD і введіть
- (Для Python 3 або вище) запити на встановлення pip3
import json import requests # get JSON string data from CityBike NYC using web requests library json_response= requests.get("https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json") # check type of json_response object print(type(json_response.text)) # load data in loads() function of json library bike_dict = json.loads(json_response.text) #check type of news_dict print(type(bike_dict)) # now get stationBeanList key data from dict print(bike_dict['stationBeanList'][0])
вихід:
<class 'str'> <class 'dict'> { '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': '' }
Винятки, пов’язані з бібліотекою JSON у Python:
- Клас json.JSONDecoderError обробляє винятки, пов'язані з операцією декодування. і це підклас ValueError.
- Виняток – json.JSONDecoderError(повідомлення, документ)
- Параметри винятку:
- msg – повідомлення про неформатовану помилку
- doc – розібрані документи JSON
- pos – початковий індекс документа, коли він не вдається
- lineno – рядок no show відповідає поз
- двокрапка – колонка не відповідає поз
Python завантажити JSON з файлу Приклад:
import json #File I/O Open function for read data from JSON File data = {} #Define Empty Dictionary Object try: with open('json_file_name.json') as file_object: data = json.load(file_object) except ValueError: print("Bad JSON file format, Change JSON File")
Infinite і NaN Numbers in Python
Формат обміну даними JSON (RFC – запит на коментарі) не допускає Infinite або Nan Value, але немає обмежень у Python— Бібліотека JSON для виконання операцій Infinite і Nan Value. Якщо JSON отримує INFINITE і тип даних Nan, він перетворює його на літерал.
Наприклад,
import json # pass float Infinite value infinite_json = json.dumps(float('inf')) # check infinite json type print(infinite_json) print(type(infinite_json)) json_nan = json.dumps(float('nan')) print(json_nan) # pass json_string as Infinity infinite = json.loads('Infinity') print(infinite) # check type of Infinity print(type(infinite))
вихід:
Infinity <class 'str'> NaN inf <class 'float'>
Повторний ключ у рядку JSON
RFC визначає, що назва ключа має бути унікальною в об’єкті JSON, але це не є обов’язковим. Python Бібліотека JSON не викликає виключення повторюваних об’єктів у JSON. Він ігнорує всі повторювані пари ключ-значення та розглядає лише останню пару ключ-значення серед них.
- Наприклад,
import json repeat_pair = '{"a": 1, "a": 2, "a": 3}' json.loads(repeat_pair)
вихід:
{'a': 3}
CLI (інтерфейс командного рядка) з JSON Python
json.tool надає інтерфейс командного рядка для перевірки синтаксису красивого друку JSON. Давайте розглянемо приклад CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
вихід:
{ "name": " Kings Authur " }
Переваги JSON в Python
- Легко повертатися між контейнером і значенням (JSON to Python та Python в JSON)
- Об’єкт JSON для читання людиною (красивий друк).
- Широко використовується в обробці даних.
- Не має однакової структури даних в одному файлі.
Обмеження реалізації JSON у Python
- У десеріалізаторі діапазону JSON і передбачення числа
- Максимальна довжина рядка JSON і масивів JSON і рівнів вкладеності об’єкта.
Python Шпаргалка JSON
Python Функція JSON | Опис |
---|---|
json.dumps(person_data) | Створіть об’єкт JSON |
json.dump(person_data, file_write) | Створіть файл JSON за допомогою файлу I/O Python |
compact_obj = json.dumps(дані, роздільники=(',',':')) | Стисніть об’єкт JSON, видаливши символ пробілу з об’єкта JSON за допомогою розділювача |
formatted_obj = json.dumps(dic, indent=4, separators=(',', ': ')) | Форматування коду JSON за допомогою Indent |
sorted_string = json.dumps(x, indent=4, sort_keys=True) | Сортування ключа об’єкта JSON в алфавітному порядку |
complex_obj = json.dumps(4 + 5j, за замовчуванням=complex_encode) | Python Складне кодування об'єктів у JSON |
JSONEncoder().encode(colour_dict) | Використання класу JSONEncoder для серіалізації |
json.loads(рядок_даних) | Декодування рядка JSON в Python словник за допомогою функції json.loads(). |
json.loads('{“__complex__”: true, “real”: 4, “img”: 5}', object_hook = is_complex) | Декодування складного об'єкта JSON Python |
JSONDecoder().decode(color_string) | Використання декодування JSON до Python з десеріалізацією |