Python JSON: Mã hóa (kết xuất), Giải mã (tải) & Đọc tệp JSON

JSON là gì Python?

JSON in Python là một định dạng tiêu chuẩn lấy cảm hứng từ JavaScript để trao đổi dữ liệu và truyền dữ liệu dưới dạng văn bản qua mạng. Nói chung, JSON ở dạng chuỗi hoặc văn bản. Nó có thể được sử dụng bởi API và cơ sở dữ liệu và nó biểu diễn các đối tượng dưới dạng cặp tên/giá trị. JSON là viết tắt của JavaKý hiệu đối tượng kịch bản.

Python Cú pháp JSON:

JSON được viết dưới dạng cặp khóa và giá trị.

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

JSON rất giống với Python từ điển. Python hỗ trợ JSON và nó có thư viện sẵn có dưới dạng JSON.

Thư viện JSON trong Python

'nguyên soái'Và'dưa chua' mô-đun bên ngoài của Python duy trì một phiên bản của JSON Python thư viện. Làm việc với JSON trong Python để thực hiện các hoạt động liên quan đến JSON như mã hóa và giải mã, trước tiên bạn cần nhập khẩu thư viện JSON và cho điều đó trong .py tập tin,

import json

Các phương pháp sau đây có sẵn trong JSON Python mô-đun

Phương pháp Mô tả Chi tiết
bãi rác() mã hóa thành các đối tượng JSON
bãi rác() ghi chuỗi được mã hóa vào tập tin
tải() Giải mã chuỗi JSON
tải () Giải mã trong khi đọc tệp JSON

Python sang JSON (Mã hóa)

JSON Thư viện của Python thực hiện bản dịch sau đây Python các đối tượng thành các đối tượng JSON theo mặc định

Python JSON
mệnh lệnh Đối tượng
Mảng
unicode Chuỗi
số - int, dài số – int
phao số - thực
Thật Thật
Sai Sai
Không áp dụng Null

Chuyển đổi Python dữ liệu sang JSON được gọi là hoạt động Mã hóa. Mã hóa được thực hiện với sự trợ giúp của phương pháp thư viện JSON – bãi rác()

kết xuất JSON() trong Python

json.dumps () in Python là một phương pháp chuyển đổi các đối tượng từ điển của Python thành định dạng dữ liệu chuỗi JSON. Điều này hữu ích khi các đối tượng được yêu cầu ở định dạng chuỗi cho các hoạt động như phân tích cú pháp, in, v.v.

Bây giờ hãy thực hiện ví dụ mã hóa json.dumps đầu tiên của chúng tôi với 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)

Đầu ra:

{"person": {"name": "Kenn", "sex": "male", "age": 28}})

Hãy xem một ví dụ về Python ghi JSON vào tệp để tạo tệp JSON của từ điển bằng chức năng tương tự bãi rác()

# 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)

Đầu ra:

Không có gì để hiển thị…Trong hệ thống của bạn, json_file.json được tạo. Bạn có thể kiểm tra tệp đó như trong phần bên dưới, ghi JSON vào tệp Python thí dụ.

Python Ví dụ về mã hóa JSON

JSON sang Python (Giải mã)

Giải mã chuỗi JSON được thực hiện với sự trợ giúp của phương thức sẵn có json.loads () & json.load() của thư viện JSON trong Python. Bảng dịch ở đây hiển thị ví dụ về các đối tượng JSON Python đối tượng rất hữu ích để thực hiện giải mã trong Python của chuỗi JSON.

JSON Python
Đối tượng mệnh lệnh
Mảng
Chuỗi unicode
số – int số - int, dài
số - thực phao
Thật Thật
Sai Sai
Null Không áp dụng

Hãy xem một phân tích cơ bản JSON Python ví dụ về giải mã với sự trợ giúp của json.loads chức năng,

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

Đầu ra:

{'person': {'name': 'Kenn', 'sex': 'male', 'age': 28}}
Type of dict_obj <class 'dict'>
Person...... {'name': 'John', 'sex': 'male'}

Python Ví dụ giải mã JSON

Giải mã tệp JSON hoặc phân tích tệp JSON trong Python

Bây giờ, chúng ta sẽ tìm hiểu cách đọc tệp JSON trong Python với Python phân tích ví dụ JSON:

LƯU Ý: Giải mã tệp JSON là thao tác liên quan đến Đầu vào/Đầu ra (I/O) của Tệp. Tệp JSON phải tồn tại trên hệ thống của bạn tại vị trí được chỉ định mà bạn đề cập trong chương trình của mình.

Python đọc tệp JSON Ví dụ:

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)

Dữ liệu ở đây là một đối tượng từ điển của Python như được hiển thị trong tệp JSON đã đọc ở trên Python thí dụ.

Đầu ra:

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

Phân tích cú pháp tệp JSON trong Python

Mã hóa nhỏ gọn trong Python

Khi cần giảm kích thước tệp JSON, bạn có thể sử dụng mã hóa nhỏ gọn trong Python.

Thí dụ,

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)

Đầu ra:

'["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 **

Định dạng mã JSON (Bản in đẹp)

  • Mục đích là viết mã có định dạng tốt để con người có thể hiểu được. Với sự hỗ trợ của việc in ấn đẹp mắt, bất kỳ ai cũng có thể dễ dàng hiểu được mã.

Ví dụ:

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)

Đầu ra:

{
   "a" : 4,
   "b" : 5
}

Định dạng mã JSON Ví dụ

Để hiểu rõ hơn về điều này, hãy thay đổi thụt lề thành 40 và quan sát kết quả đầu ra-

Định dạng mã JSON Ví dụ

Đặt hàng mã JSON:

sắp xếp_keys thuộc tính trong Python Đối số của hàm dumps sẽ sắp xếp khóa trong JSON theo thứ tự tăng dần. Đối số sort_keys là một thuộc tính Boolean. Khi đúng thì được phép sắp xếp nếu không thì không. Hãy cùng tìm hiểu với Python chuỗi thành ví dụ sắp xếp JSON.

Thí dụ,

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)

Đầu ra:

{
    "age": 45,
    "cars": [ {
        "model": "Audi A1", 
        "mpg": 15.1
    },
    {
        "model": "Zeep Compass", 
        "mpg": 18.1
    }
    ],
    "children": [ "Alice",
		  "Bob"
	],
    "married": true,
    "name": "Ken",
    "pets": [ 
		"Dog"
	]
}

Như bạn có thể quan sát, độ tuổi của chìa khóa, ô tô, trẻ em, v.v. được sắp xếp theo thứ tự tăng dần.

Mã hóa đối tượng phức tạp của Python

Một đối tượng phức tạp có hai phần khác nhau là

  1. Phần thực
  2. Phần ảo

Mã hóa đối tượng phức tạp của Python

Ví dụ: 3 +2i

Trước khi thực hiện mã hóa một đối tượng phức tạp, bạn cần kiểm tra xem biến có phức tạp hay không. Bạn cần tạo một hàm kiểm tra giá trị được lưu trữ trong một biến bằng cách sử dụng một phương thức thể hiện.

Hãy tạo hàm cụ thể để kiểm tra xem đối tượng có phức tạp hay đủ điều kiện để mã hóa hay không.

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)

Đầu ra:

'[4.0, 5.0]'

Giải mã đối tượng JSON phức tạp trong Python

Để giải mã đối tượng phức tạp trong JSON, hãy sử dụng tham số object_hook để kiểm tra chuỗi JSON có chứa đối tượng phức tạp hay không. Hãy cùng tìm hiểu với chuỗi thành JSON Python Thí dụ,

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)

Đầu ra:

Complex_object...... (4+5j)
Without_complex_object...... {'real': 6, 'img': 7}

Tổng quan về lớp tuần tự hóa JSON JSONEncode

Lớp JSONEncode được sử dụng để tuần tự hóa bất kỳ Python đối tượng trong khi thực hiện mã hóa. Nó chứa ba phương pháp mã hóa khác nhau đó là

  • mặc định(o) – Được triển khai trong lớp con và trả về đối tượng tuần tự hóa cho o vật.
  • mã hóa(o) – Tương tự như kết xuất JSON Python phương thức trả về chuỗi JSON của Python cấu trúc dữ liệu.
  • iterencode(o) – Biểu diễn từng chuỗi một và mã hóa đối tượng o.

Với sự trợ giúp của phương thức Encode() của lớp JSONEncoding, chúng ta cũng có thể mã hóa bất kỳ Python đối tượng như hình dưới đây Python Ví dụ về bộ mã hóa 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)

Đầu ra:

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

Tổng quan về lớp giải tuần tự hóa JSON JSONDecode

Lớp JSONDecoding được sử dụng để giải tuần tự hóa bất kỳ Python đối tượng trong khi thực hiện giải mã. Nó chứa ba phương pháp giải mã khác nhau đó là

  • mặc định(o) – Được thực hiện trong lớp con và trả về đối tượng đã được deserialized o vật.
  • giải mã(o) – Tương tự như trả về phương thức json.loads() Python cấu trúc dữ liệu của chuỗi JSON hoặc dữ liệu.
  • raw_decode(o) - Đại diện Python từ điển từng cái một và giải mã đối tượng o.

Với sự trợ giúp của phương thức giải mã () của lớp JSONDecoding, chúng ta cũng có thể giải mã chuỗi JSON như dưới đây Python Ví dụ về bộ giải mã 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)

Đầu ra:

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

Giải mã dữ liệu JSON từ URL: Ví dụ thực tế

Chúng tôi sẽ tìm nạp dữ liệu của CityBike NYC (Hệ thống chia sẻ xe đạp) từ URL được chỉ định(https://gbfs.citibikenyc.com/gbfs/2.3/gbfs.json) và chuyển đổi sang định dạng từ điển.

Python tải JSON từ tệp Ví dụ:

LƯU Ý: - Đảm bảo thư viện yêu cầu đã được cài đặt trong Python, Nếu không thì mở Terminal hoặc CMD và gõ

  • (Đối với Python 3 trở lên) yêu cầu cài đặt 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]) 

Đầu ra:

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

Các ngoại lệ liên quan đến Thư viện JSON trong Python:

  • Lớp json.JSONDecodingLỗi xử lý ngoại lệ liên quan đến hoạt động giải mã. và nó là một lớp con của Giá trịError.
  • Ngoại lệ - json.JSONDecodingError(tin nhắn, tài liệu)
  • Các tham số của Ngoại lệ là,
    • msg – Thông báo lỗi chưa được định dạng
    • doc – Tài liệu JSON được phân tích cú pháp
    • pos - bắt đầu lập chỉ mục của tài liệu khi nó bị lỗi
    • lineno – dòng không hiển thị tương ứng với pos
    • dấu hai chấm – cột không tương ứng với pos

Python tải JSON từ tệp Ví dụ:

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")

Thư viện JSON trong Python

Vô hạn và NaN Numbers in Python

Định dạng trao đổi dữ liệu JSON (RFC – Yêu cầu nhận xét) không cho phép Giá trị vô hạn hoặc Nan nhưng không có hạn chế về Python- Thư viện JSON để thực hiện thao tác liên quan đến giá trị vô hạn và Nan. Nếu JSON có kiểu dữ liệu INFINITE và Nan thì nó sẽ được chuyển đổi thành dạng số nguyên.

Thí dụ,

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))

Đầu ra:

Infinity
<class 'str'>
NaN
inf
<class 'float'>	

Khóa lặp lại trong chuỗi JSON

RFC chỉ định tên khóa phải là duy nhất trong đối tượng JSON nhưng không bắt buộc. Python Thư viện JSON không đưa ra ngoại lệ đối với các đối tượng lặp lại trong JSON. Nó bỏ qua tất cả các cặp khóa-giá trị lặp lại và chỉ xem xét cặp khóa-giá trị cuối cùng trong số đó.

  • Thí dụ,
import json
repeat_pair = '{"a":  1, "a":  2, "a":  3}'
json.loads(repeat_pair)

Đầu ra:

{'a': 3}

CLI (Giao diện dòng lệnh) với JSON trong Python

json.tool cung cấp giao diện dòng lệnh để xác thực cú pháp in đẹp JSON. Hãy xem một ví dụ về CLI

Giao diện dòng lệnh với JSON

$ echo '{"name" : "Kings Authur" }' | python3 -m json.tool

Đầu ra:

{
    "name": " Kings Authur "
}

Ưu điểm của JSON trong Python

  • Dễ dàng di chuyển trở lại giữa vùng chứa và giá trị (JSON sang Python và Python sang JSON)
  • Đối tượng JSON có thể đọc được (bản in đẹp) của con người
  • Được sử dụng rộng rãi trong việc xử lý dữ liệu.
  • Không có cấu trúc dữ liệu giống nhau trong một tệp.

Hạn chế triển khai JSON trong Python

  • Trong trình giải tuần tự của phạm vi JSON và dự đoán một số
  • Độ dài tối đa của chuỗi JSON và các mảng JSON cũng như mức lồng nhau của đối tượng.

Python Bảng cheat JSON

Python Hàm JSON Mô tả Chi tiết
json.dumps(person_data) Tạo đối tượng JSON
json.dump(person_data, file_write) Tạo tệp JSON bằng tệp I/O của Python
compact_obj = json.dumps(dữ liệu, dấu phân cách=(',',':')) Thu gọn đối tượng JSON bằng cách xóa ký tự khoảng trắng khỏi Đối tượng JSON bằng dấu phân cách
formatted_obj = json.dumps(dic, thụt lề=4, dấu phân cách=(',', ': ')) Định dạng mã JSON bằng cách sử dụng thụt lề
Sort_string = json.dumps(x, indent=4, Sort_keys=True) Sắp xếp khóa đối tượng JSON theo thứ tự bảng chữ cái
complex_obj = json.dumps(4 + 5j, mặc định=complex_encode) Python Mã hóa đối tượng phức tạp trong JSON
JSONEncode().encode(colour_dict) Sử dụng lớp JSONEncoding để tuần tự hóa
json.loads(data_string) Giải mã chuỗi JSON trong Python từ điển sử dụng hàm json.loads()
json.loads('{“__complex__”: đúng, “thực”: 4, “img”: 5}', object_hook = is_complex) Giải mã đối tượng JSON phức tạp thành Python
JSONDecoding().decode(colour_string) Sử dụng Giải mã JSON để Python với quá trình khử lưu huỳnh