Python JSON:кодировать (дампы), декодировать (загружать) и читать файл JSON
Что такое JSON в Python?
JSON в Python — это стандартный формат, вдохновленный JavaScript, для обмена данными и передачи данных в текстовом формате по сети. Как правило, JSON имеет строковый или текстовый формат. Он может использоваться API и базами данных и представляет объекты в виде пар имя/значение. JSON означает нотацию объектов JavaScript.
Синтаксис Python JSON:
JSON записывается как пара ключ-значение.
{ "Key": "Value", "Key": "Value", }
JSON очень похож на Словарь Питона. Python поддерживает JSON и имеет встроенную библиотеку JSON.
Библиотека JSON в Python
‘маршал ‘ и ‘огурец’ внешние модули Python поддерживают версию JSON Библиотека Python. Работая с JSON в Python для выполнения связанных с JSON операций, таких как кодирование и декодирование, вам необходимо сначала импортировать Библиотека JSON и для этого в вашем .py файл,
import json
В модуле JSON Python доступны следующие методы
Метод | Описание |
---|---|
дампы() | кодирование в объекты JSON |
дамп() | запись закодированной строки в файл |
загрузки() | Декодировать строку JSON |
загрузить() | Декодировать при чтении файла JSON |
Питон в JSON (кодирование)
Библиотека JSON Python выполняет следующую трансляцию объектов Python в объекты JSON по умолчанию
Питон | JSON |
---|---|
диктор | Объект |
список | Массив |
юникод | Строка |
число – целое, длинное | число – целое |
плавающий | число – реальное |
Верно | Верно |
Неверно | Неверно |
Нет | Нет |
Преобразование данных Python в JSON называется операцией кодирования. Кодирование выполняется с помощью библиотечного метода JSON – dumps().
Дампы JSON() в Python
json.dumps() в 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}})
Давайте посмотрим на пример записи JSON в файл Python для создания файла 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 | Питон |
---|---|
Объект | дикт |
Массив | список |
Строка | юникод |
число – целое | число – целое, длинное |
число – настоящее | плавающий |
Верно | Верно |
Неверно | Неверно |
Нет | Нет |
Давайте посмотрим на базовый пример декодирования 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:
sort_keys Атрибут в аргументе функции дампов Python будет сортировать ключ в 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. объект.
- кодировать(о) – То же, что и метод Python для дампа JSON, возвращает строку JSON структуры данных Python.
- итеренкод(о) – Представлять строку одну за другой и кодировать объект 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 объект.
- декодировать(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://feeds.citibikenyc.com/stations/stations.json) и преобразовывать в формат словаря.
Python загружает JSON из файла Пример:
ПРИМЕЧАНИЕ. Убедитесь, что библиотека запросов уже установлена на вашем Python. Если нет, откройте Terminal или CMD и введите
- (Для Python 3 или выше) запросы на установку pip3
import json import requests # get JSON string data from CityBike NYC using web requests library json_response= requests.get("https://feeds.citibikenyc.com/stations/stations.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)
- Параметры исключения:
- msg – неформатированное сообщение об ошибке.
- doc — документы JSON проанализированы
- pos — запустить индекс документа, если он не пройден
- lineno — строка не показывается соответствует позиции.
- двоеточие – столбец не соответствует позиции
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")
Бесконечные числа и числа NaN в Python
Формат обмена данными JSON (RFC — Request For Comment) не допускает использования 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 на 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 с использованием файлового ввода-вывода Python |
compact_obj =json.dumps(data, separators=(‘,’,’:’)) | Сжать объект JSON, удалив символ пробела из объекта JSON с помощью разделителя |
formatted_obj =json.dumps(dic, indent=4, separators=(‘,’, ‘:‘)) | Форматирование кода JSON с использованием отступа |
sorted_string =json.dumps(x, indent=4, sort_keys=True) | Сортировка ключа объекта JSON по алфавиту |
complex_obj =json.dumps(4 + 5j, по умолчанию=complex_encode) | Кодирование сложных объектов Python в JSON |
JSONEncoder().encode(color_dict) | Использование класса JSONEncoder для сериализации |
json.loads(data_string) | Декодирование строки JSON в словаре Python с использованием функции json.loads() |
json.loads(‘{“__complex__”:true, “real”:4, “img”:5}’, object_hook =is_complex) | Декодирование сложного объекта JSON в Python |
JSONDecoder().decode(color_string) | Использование декодирования JSON в Python с десериализацией |
Python
- Типы данных Python
- Операторы Python
- Python во время цикла
- Оператор передачи Python
- Аргументы функции Python
- Словарь Питона
- Файловый ввод-вывод Python
- Java BufferedReader:как читать файл в Java с примером
- Python Проверить, существует ли файл | Как проверить, существует ли каталог в Python
- Python — файловый ввод-вывод