Python JSON: Кодиране (изхвърляне), Декодиране (зареждане) json Данни & Файл (пример)

Съдържание:

Anonim

Какво е JSON?

JSON е стандартен формат за обмен на данни, който е вдъхновен от JavaScript. Като цяло JSON е в низ или текстов формат. JSON означава J ava S cript O bject N otation.

Синтаксисът на JSON: JSON се записва като двойка ключ и стойност.

{"Key": "Value","Key": "Value",}

JSON е много подобен на речника на Python. Python поддържа JSON и има вградена библиотека като JSON.

JSON библиотека в Python

marshal “ и „ pickle“ външни модули на Python поддържат версия на JSON библиотека. За да извършите операции, свързани с JSON, като кодиране и декодиране в Python, първо трябва да импортирате JSON библиотека и за това във вашия .py файл,

import json

Следните методи са налични в модула JSON

Метод Описание
сметища () кодиране към JSON обекти
изхвърляне () кодирано писане на низове във файл
товари () Декодирайте JSON низ
зареждане () Декодирайте, докато четете JSON файл

Python към JSON (кодиране)

JSON библиотеката на Python по подразбиране извършва превод на обекти на Python в JSON обекти

Python JSON
дикт Обект
списък Масив
unicode Струна
номер - int, long номер - вътрешно
плувка число - реално
Вярно Вярно
Невярно Невярно
Нито един Нула

Преобразуването на данни от Python в JSON се нарича операция за кодиране. Кодирането се извършва с помощта на JSON библиотечен метод - dumps ()

методът dumps () преобразува обекта на речника на python в JSON формат на низови данни.

Сега позволява да изпълним първия си пример за кодиране с Python.

import jsonx = {"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 файл на речника, използвайки същата функция dump ()

# here we create new data_file.json file with write mode using file i/o operationwith open('json_file.json', "w") as file_write:# write json data into filejson.dump(person_data, file_write)

Изход:

Нищо за показване

... Във вашата система е създаден json_file.json, можете да проверите този файл.

JSON към Python (декодиране)

JSON низ декодиране е направено с помощта на вградени метод товари () и натоварване () на JSON библиотека в Python. Тук таблицата за преводи показва пример на JSON обекти към Python обекти, които са полезни за извършване на декодиране в Python на JSON низ.

JSON Python
Обект дикт
Масив списък
Струна unicode
номер - вътрешно номер - int, long
число - реално плувка
Вярно Вярно
Невярно Невярно
Нула Нито един

Нека видим основен пример за декодиране в Python с помощта на функцията json.loads () ,

import json # json library imported# json data stringperson_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_objprint("Type of dict_obj", type(dict_obj))# get human object detailsprint("Person… ", dict_obj.get('person'))

Изход:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}Type of dict_obj Person… {'name': 'John', 'sex': 'male'}

Декодиране на JSON файл или анализиране на JSON файл в Python

ЗАБЕЛЕЖКА: Декодирането на JSON файл е свързана с входящи / извеждани файлове (I / O). JSON файлът трябва да съществува във вашата система на определеното място, което споменавате в програмата си.

Пример,

import json#File I/O Open function for read data from JSON Filewith open('X:/json_file.json') as file_object:# store file data in objectdata = json.load(file_object)print(data)

Тук данните са обект на речника на Python.

Изход:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}

Компактно кодиране в Python

Когато трябва да намалите размера на вашия JSON файл, можете да използвате компактно кодиране в Python.

Пример,

import json# Create a List that contains dictionarylst = ['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 dictionarycompact_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 jsondic = { '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 в аргумента на функцията dumps () ще сортира ключа в JSON във възходящ ред. Аргументът sort_keys е булев атрибут. Когато е вярно, сортирането е разрешено, иначе не

Пример,

import jsonx = {"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

Комплексният обект има две различни части, т.е.

  1. Реална част
  2. Въображаема част

Пример: 3 + 2i

Преди да извършите кодиране на сложен обект, трябва да проверите дали дадена променлива е сложна или не. Трябва да създадете функция, която проверява стойността, съхранена в променлива, чрез метод на екземпляр.

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

import json# create function to check instance is complex or notdef complex_encode(object):# check using isinstance methodif isinstance(object, complex):return [object.real, object.imag]# raised error using exception handling if object is not complexraise TypeError(repr(object) + " is not JSON serialized")# perform json encoding by passing parametercomplex_obj = json.dumps(4 + 5j, default=complex_encode)print(complex_obj)

Изход:

'[4.0, 5.0]'

Сложно JSON декодиране на обект в Python

За да декодирате сложен обект в JSON, използвайте параметър object_hook, който проверява дали JSON низът съдържа сложния обект или не. Пример,

import json# function check JSON string contains complex objectdef 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 notcomplex_object =json.loads('{"__complex__": true, "real": 4, "img": 5}', object_hook = is_complex)#here we not passed complex object so it's convert into dictionarysimple_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 обект.
  • encode (o) - Същото като метода json.dumps () връща JSON низ от структурата на данни на Python.
  • iterencode (o) - Представят низ един по един и кодират обект o.

С помощта на метода encode () от клас JSONEncoder можем да кодираме всеки Python обект.

# import JSONEncoder class from jsonfrom json.encoder import JSONEncodercolour_dict = { "colour": ["red", "yellow", "green" ]}# directly called encode method of JSONJSONEncoder().encode(colour_dict)

Изход:

'{"colour": ["red", "yellow", "green"]}'

Преглед на JSON клас на десериализация JSONDecoder

Класът JSONDecoder се използва за десериализация на всеки Python обект, докато изпълнява декодиране. Той съдържа три различни метода за декодиране, които са

  • по подразбиране (o) - Внедрено в подкласа и връща десериализиран обект o обект.
  • decode (o) - Същото като метода json.loads () връща Python структура от данни на JSON низ или данни.
  • raw_decode (o) - Представят речник на Python един по един и декодират обект o.

С помощта на метода decode () от клас JSONDecoder можем да декодираме и JSON низ.

import json# import JSONDecoder class from jsonfrom json.decoder import JSONDecodercolour_string = '{ "colour": ["red", "yellow"]}'# directly called decode method of JSONJSONDecoder().decode(colour_string)

Изход:

{'colour': ['red', 'yellow']}

Декодиране на JSON данни от URL: Пример от реалния живот

Ще извлечем данни за CityBike NYC (система за споделяне на велосипеди) от посочен URL адрес (https://feeds.citibikenyc.com/stations/stations.json) и ще конвертираме във формат на речника.

Пример,

ЗАБЕЛЕЖКА: - Уверете се, че библиотеката за заявки вече е инсталирана във вашия Python, ако не, отворете Terminal или CMD и въведете

  • (За Python 3 или по- нова версия ) заявки за инсталиране на pip3
import jsonimport requests# get JSON string data from CityBike NYC using web requests libraryjson_response= requests.get("https://feeds.citibikenyc.com/stations/stations.json")# check type of json_response objectprint(type(json_response.text))# load data in loads() function of json librarybike_dict = json.loads(json_response.text)#check type of news_dictprint(type(bike_dict))# now get stationBeanList key data from dictprint(bike_dict['stationBeanList'][0])

Изход:

{'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 - начален индекс на doc, когато е неуспешен
    • lineno - линия не показва показва съответства на поз
    • дебело черво - колона № съответства на поз

Пример,

import json#File I/O Open function for read data from JSON Filedata = {} #Define Empty Dictionary Objecttry: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 - Искане за коментари) не позволява Infinite или Nan Value, но в Python-JSON Library няма ограничение за извършване на операция, свързана с Infinite и Nan Value. Ако JSON получи INFINITE и Nan тип данни, отколкото го преобразува в буквален.

Пример,

import json# pass float Infinite valueinfinite_json = json.dumps(float('inf'))# check infinite json typeprint(infinite_json)print(type(infinite_json))json_nan = json.dumps(float('nan'))print(json_nan)# pass json_string as Infinityinfinite = json.loads('Infinity')print(infinite)# check type of Infinityprint(type(infinite))

Изход:

InfinityNaNinf

Повтарящ се ключ в JSON String

RFC посочва, че името на ключа трябва да бъде уникално в JSON обект, но не е задължително. Python JSON библиотеката не създава изключение от повтарящи се обекти в JSON. Той игнорира всички повторени двойки ключ-стойност и разглежда само последната двойка ключ-стойност сред тях.

  • Пример,
import jsonrepeat_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 и нива на влагане на обект.

Cheat Code

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, по подразбиране = комплексен_код)

Кодиране на сложен обект на Python в JSON

JSONEncoder (). Кодиране (colour_dict)

Използване на JSONEncoder Class за сериализация

json.loads (data_string)

Декодиране на JSON String в речника на Python с помощта на функцията json.loads ()

json.loads ('{"__ complex__": true, "real": 4, "img": 5}', object_hook = is_complex)

Декодиране на сложен JSON обект в Python

JSONDecoder (). Декодиране (colour_string)

Използване на декодиране на JSON към Python с десериализация