Python JSON: кодирование (сбросы), декодирование (загрузка) и чтение файла JSON

Что такое JSON в Python?

JSON в Python — это стандартный формат, созданный на основе JavaScript, для обмена и передачи данных в текстовом формате по сети. Обычно JSON имеет строковый или текстовый формат. Он может использоваться API и базами данных и представляет объекты как пары имя/значение. JSON означает нотацию объектов JavaScript.

Синтаксис JSON Python:

JSON записывается как пара ключ-значение.

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

JSON очень похож на словарь Python. Питон поддерживает JSON и имеет встроенную библиотеку JSON.

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

"маршал' а также 'соленый огурец' внешние модули Python поддерживают версию JSON Библиотека Python. Работая с JSON в Python для выполнения операций, связанных с JSON, таких как кодирование и декодирование, вам необходимо сначала Импортировать JSON и для этого в вашем .py файл,

import json

Фоллоwing методы доступны в модуле JSON Python.

Способ доставки Описание
свалки() кодирование в объекты JSON
свалка() запись закодированной строки в файл
загружает() Декодировать строку JSON
нагрузка() Декодирование во время чтения файла JSON

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

JSON Библиотека Python выполняет следующееwing перевод объектов Python в объекты JSON по умолчанию

Питон JSON
ДИКТ объект
список массив
юникода строка
число – целое, длинное число – целое
плавать число – настоящее
Правда Правда
Ложь Ложь
Ничто Значение Null

Преобразование данных Python в JSON называется операцией кодирования. Кодирование осуществляется с помощью метода библиотеки JSON — свалки()

JSON dumps() в 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 словаря с использованием той же функции. свалка()

# 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 в Python (декодирование)

Декодирование строки JSON выполняется с помощью встроенного метода. json.loads () & json.load() библиотеки JSON в Python. Здесь таблица перевода показывает пример объектов JSON для Объекты Python которые полезны для декодирования строки JSON в Python.

JSON Питон
объект ДИКТ
массив список
строка юникода
число – целое число – целое, длинное
число – настоящее плавать
Правда Правда
Ложь Ложь
Значение 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 Python

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

Теперь мы научимся читать файл JSON на Python с помощью примера синтаксического анализа JSON Python:

ПРИМЕЧАНИЕ: Декодирование файла 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, как показано в приведенном выше примере Python для чтения JSON-файла.

Вывод:

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

Анализ файла JSON в Python

Компактное кодирование в 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
}

Пример формата кода JSON

Чтобы лучше это понять, измените отступ на 40 и посмотрите результат:

Пример формата кода JSON

Заказ JSON-кода:

сортировка_ключей Атрибут в аргументе функции дампов Python будет сортировать ключ в JSON в порядке возрастания. Аргумент sort_keys является логическим атрибутом. Когда это правда, сортировка разрешенаwise нет. Давайте разберемся с примером сортировки строк 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"
	]
}

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

сplex Кодирование объектов Python

Комplex объект состоит из двух разных частей, то есть

  1. Реальная часть
  2. Мнимая часть

сplex Объектное кодирование Python

Пример: 3 +2i

Прежде чем выполнять кодирование complex объект, вам нужно проверить, является ли переменная complex или нет. Вам нужно создать функцию, которая проверяет значение, хранящееся в переменной, с помощью метода экземпляра.

Давайте создадим специальную функцию для проверки объекта com.plex или пригодный для кодирования.

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]'

сplex Декодирование объекта JSON в Python

Чтобы декодировать complex объект в JSON, используйте параметр object_hook, который проверяет, что строка JSON содержит complex объект или нет. Давайте разберемся со строкой в ​​примере 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.
  • итеренкод(о) – Представлять строки одну за другой и кодировать объект o.

С помощью метода encode() класса JSONEncoder мы также можем закодировать любой объект Python, как показано в примере кодировщика JSON Python ниже.

# 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 (о) – Представлять словарь 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 обрабатывает исключение, связанное с операцией декодирования. и это подкласс Ошибка значения.
  • Исключение - json.JSONDecoderError(сообщение, документ)
  • Параметры исключения:
    • 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")

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

Бесконечные числа и числа NaN в Python

Формат обмена данными JSON (RFC — запрос комментариев) не допускает бесконечных значений или значений Nan, но в библиотеке Python-JSON нет ограничений на выполнение операций, связанных с бесконечными значениями и значениями 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. Давайте посмотрим пример CLI

Интерфейс командной строки с JSON

$ 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(данные, разделители=(',',':')) Сжать объект 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_кодировать) Python Комplex Кодировка объекта в JSON
JSONEncoder().encode(color_dict) Использование класса JSONEncoder для сериализации
json.loads(строка_данных) Декодирование строки JSON в словаре Python с использованием функции json.loads()
json.loads('{"__complex__»: правда, «реальный»: 4, «img»: 5}', object_hook = is_complex) Расшифровка complex Объект JSON для Python
JSONDecoder().decode(color_string) Использование декодирования JSON в Python с десериализацией