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 пример.

Python Пример за JSON кодиране

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

Python Пример за декодиране на JSON

Декодиране на 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}}

Разбор на 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 кода:

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

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

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

Сложно обектно кодиране на 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")

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

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

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

$ 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 с десериализация