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 модул
Начин на доставка | Descriptйон |
---|---|
свалки() | кодиране към JSON обекти |
дъмп() | запис на кодиран низ във файл |
товари() | Декодирайте JSON низа |
натоварване () | Декодирайте, докато JSON файлът се чете |
Python към JSON (кодиране)
JSON Библиотека на Python извършва следния превод на Python обекти в JSON обекти по подразбиране
Python | JSON |
---|---|
Dict | Обект |
списък | Array |
уникод | Низ |
число – int, long | число – вътр |
поплавък | число – реално |
Вярно | Вярно |
Фалшив | Фалшив |
None | 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 файл на речника, като използвате същата функция дъмп()
# 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 |
---|---|
Обект | Dict |
Array | списък |
Низ | уникод |
число – вътр | число – int, long |
число – реално | поплавък |
Вярно | Вярно |
Фалшив | Фалшив |
Null | None |
Нека да видим базов анализ на 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 аргументът на функцията dumps ще сортира ключа в JSON във възходящ ред. Аргументът sort_keys е булев атрибут. Когато е true, сортирането е разрешено, в противен случай не. Да разберем с 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 обект.
- кодирам (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 обект.
- декодирам(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)
- Параметрите на изключение са,
- 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")
Infinite и NaN Numbers in Python
Форматът за обмен на данни JSON (RFC – Искане за коментари) не позволява Infinite или Nan стойност, но няма ограничение в Python- JSON библиотека за извършване на операция, свързана с Infinite и Nan стойност. Ако 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 pretty-print синтаксиса. Нека да видим пример за CLI
$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool
Изход:
{ "name": " Kings Authur " }
Предимства на JSON в Python
- Лесно за връщане между контейнер и стойност (JSON to Python намлява Python към JSON)
- Човешки четим (Pretty-print) JSON обект
- Широко използван при обработка на данни.
- Няма същата структура на данните в един файл.
Ограничения за внедряване на JSON в Python
- В десериализатор на JSON диапазон и прогнозиране на число
- Максималната дължина на JSON низ и масиви от JSON и нива на влагане на обект.
Python JSON Cheat Sheet
Python JSON функция | Descriptйон |
---|---|
json.dumps(person_data) | Създайте JSON обект |
json.dump(person_data, file_write) | Създайте JSON файл, като използвате File I/O на Python |
compact_obj = json.dumps(данни, разделители=(',',':')) | Компактен JSON обект чрез премахване на знака за интервал от JSON обект с помощта на разделител |
formatted_obj = json.dumps(dic, отстъп=4, разделители=(',', ': ')) | Форматиране на JSON код с помощта на отстъп |
sorted_string = json.dumps(x, отстъп=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(цветен_низ) | Използване на декодиране на JSON към Python с десериализация |