You are currently viewing Работа с данными JSON в Python

Работа с данными JSON в Python

Введение JSON в Python :

Полная форма JSON — это обозначение объектов JavaScript. Это означает, что для хранения и передачи данных используется файл сценария (исполняемый файл), состоящий из текста на языке программирования. Python поддерживает JSON через встроенный пакет, называемый JSON. Чтобы использовать эту функцию, мы импортируем пакет JSON в скрипт Python. Текст в JSON выполняется с помощью строки в кавычках, которая содержит значение в сопоставлении ключ-значение в { }. Он похож на словарь на Python. JSON показывает API, аналогичный пользователям стандартных библиотечных модулей marshal и pickle, а Python изначально поддерживает функции JSON. например:

# Python program showing
# use of json package

import json

# {key:value mapping}
a ={"name":"John",
"age":31,
	"Salary":25000}

# conversion to JSON done by dumps() function
b = json.dumps(a)

# printing the output
print(b)

Выход:

{"age": 31, "Salary": 25000, "name": "John"}

Как вы можете видеть, JSON поддерживает примитивные типы, такие как строки и числа, а также вложенные списки, кортежи и объекты

# Python program showing that
# json support different primitive
# types

import json

# list conversion to Array
print(json.dumps(['Welcome', "to", "ProgramBox"]))

# tuple conversion to Array
print(json.dumps(("Welcome", "to", "ProgramBox")))

# string conversion to String
print(json.dumps("Hi"))

# int conversion to Number
print(json.dumps(123))

# float conversion to Number
print(json.dumps(23.572))

# Boolean conversion to their respective values
print(json.dumps(True))
print(json.dumps(False))

# None value to null
print(json.dumps(None))

Выход:

["Welcome", "to", "GeeksforGeeks"]
["Welcome", "to", "GeeksforGeeks"]
"Hi"
123
23.572
true
false
null

Сериализация JSON : 

Процесс кодирования JSON обычно называется сериализация. Этот термин относится к преобразованию данных в серию байтов (следовательно, последовательных) для хранения или передачи по сети. Для обработки потока данных в файле библиотека JSON в Python использует функцию dump() для преобразования объектов Python в соответствующий объект JSON, что упрощает запись данных в файлы. См. Следующую таблицу, приведенную ниже.

Объект PythonОбъект JSON
dictobject
list, tuplearray
strstring
int, long, floatnumbers
Truetrue
Falsefalse
Nonenull

Пример сериализации : 

Рассмотрим приведенный пример объекта Python.

var = {
	"Subjects": {
				"Maths":85,
				"Physics":90
				}
	}

Используя контекстный менеджер Python, создайте файл с именем Sample.json и откройте его в режиме записи.

with open("Sample.json", "w") as p:
	json.dump(var, p)

Здесь функция dump() принимает два аргумента: во-первых, объект данных, подлежащий сериализации, и, во-вторых, объект, в который он будет записан(байтовый формат).

Десериализация JSON : 

Десериализация противоположна сериализации, т. е. преобразованию объектов JSON в соответствующие объекты Python. Для этого используется метод load (). Если вы использовали данные JSON из другой программы или получили их в строковом формате JSON, то их можно легко десериализовать с помощью функции load(), которая обычно используется для загрузки из строки, в противном случае корневой объект находится в списке или dict.

with open("Sample.json", "r") as read_it:
	data = json.load(read_it)

Пример десериализации : 

json_var ="""
{
	"Country": {
		"name": "INDIA",
		"Languages_spoken": [
			{
				"names": ["Hindi", "English", "Bengali", "Telugu"]
			}
		]
	}
}
"""
var = json.loads(json_var)

Кодирование и декодирование : 

Кодирование определяется как преобразование текста или значений в зашифрованную форму, которую может использовать только желаемый пользователь путем ее декодирования. Здесь кодирование и декодирование выполняется для формата JSON (объекта). Кодирование также известно как Сериализация, а декодирование известно как Десериализация. В Python есть популярный пакет для этой операции. Этот пакет известен как Demjson. Чтобы установить его, выполните следующие действия.

Для Windows:

pip install demjson

Для Ubuntu:

 sudo apt-get update sudo apt-get install python-demjson

Кодирование : Функция encode() используется для преобразования объекта python в строковое представление JSON.

Syntax: demjson.encode(self, obj, nest_level=0)

Пример 1: 

Кодирование с использованием пакета demjson.

# storing marks of 3 subjects
var = [{"Math": 50, "physics":60, "Chemistry":70}]
print(demjson.encode(var))

Выход:

 [{"Chemistry":70, "Math":50, "physics":60}]

Расшифровка: Функция decode() используется для преобразования объекта JSON в тип формата python.

Syntax : demjson.decode(self, obj)

Пример 2: 

Декодирование с использованием пакета demjson

var = '{"a":0, "b":1, "c":2, "d":3, "e":4}'
text = demjson.decode(var)

Выход:

{'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4}

Пример 3: 

Кодирование с использованием пакета iterencode

# Other Method of Encoding
json.JSONEncoder().encode({"foo": ["bar"]})
'{"foo": ["bar"]}'

# Using iterencode(object) to encode a given object.
for i in json.JSONEncoder().iterencode(bigobject):
	mysocket.write(i)

Пример 4: 

Кодирование и декодирование с использованием дампов() и нагрузок().

# To encode and decode operations
import json
var = {'age':31, 'height'= 6}
x = json.dumps(var)
y = json.loads(var)
print(x)
print(y)

# when performing from a file in disk
with open("any_file.json", "r") as readit:
	x = json.load(readit)
print(x)

Использование командной строки

Библиотека JSON также может быть использована из командной строки для проверки и печати вашего JSON.

$ echo "{ \"name\": \"Monty\", \"age\": 45 }"

Поиск по JSON с помощью JMESpath

JMESpath — это язык запросов для JSON. Это позволяет вам легко получить необходимые данные из документа JSON. Если вы когда-либо раньше работали с JSON, вы, вероятно, знаете, что вложенное значение легко получить. Например, doc[“person”][“age”] предоставит вам вложенное значение возраста в документе.

Во-первых, установите jmespath :

$ pip3 install jmespath

Пример из реального мира : 

Давайте рассмотрим реальный пример реализации JSON в python. Хорошим источником для практических целей является JSON_placeholder, он предоставляет отличный пакет запросов API, который мы будем использовать в нашем примере. Чтобы начать, выполните следующие простые шаги. Откройте Python IDE или CLI и создайте новый файл сценария, назовите его sample.py.

import requests
import json

# Now we have to request our JSON data through
# the API package
res = requests.get("https://jsonplaceholder.typicode.com / todos")
var = json.loads(res.text)

# To view your Json data, type var and hit enter
var

# Now our Goal is to find the User who have
# maximum completed their task !!
# i.e we would count the True value of a
# User in completed key.
# {
	# "userId": 1,
	# "id": 1,
	# "title": "Hey",
	# "completed": false, # we will count
						# this for a user.
# }

# Note that there are multiple users with
# unique id, and their task have respective
# Boolean Values.

def find(todo):
	check = todo["completed"]
	max_var = todo["userId"] in users
	return check and max_var

# To find the values.

Value = list(filter(find, todos))

# To write these value to your disk

with open("sample.json", "w") as data:
	Value = list(filter(keep, todos))
	json.dump(Value, data, indent = 2)

Чтобы узнать больше, кликните сюда