Kiểu dữ liệu tập hợp trong Python không phải là JSON Serializable. Nếu bạn cố gắng chuyển đổi Set thành json, bạn sẽ gặp lỗi này: LoạiError: Đối tượng của loại tập hợp không thể tuần tự hóa JSON. Điều này là bởi vì Mô-đun json Python inbuilt chỉ có thể xử lý các kiểu dữ liệu nguyên thủy tương đương với JSON trực tiếp chứ không phải các kiểu dữ liệu phức tạp như Set.

Ví dụ: vấn đề cơ bản là các phương pháp bộ mã hóa JSON như json.dump ()json.dumps () biết cách tuần tự hóa các kiểu dữ liệu cơ bản theo mặc định (ví dụ: từ điển, danh sách, chuỗi, số nguyên, Không có, v.v.). Vì vậy, chúng ta hãy xem làm thế nào để giải quyết lỗi này.

Python được đặt thành json

Đến đổi Python Bộ đến JSONsử dụng jsonpickle.encode () phương pháp. Các jsonpickle là một bên thứ ba mô-đun giúp chúng tôi làm cho tập hợp JSON có thể tuần tự hóa. Các jsonpickle là một bên thứ ba Mô-đun Python được tạo để làm việc với các Đối tượng Python phức tạp.

Bạn có thể sử dụng mô-đun jsonpickle để tuần tự hóa các đối tượng phức tạp thành JSON và giải mã hóa từ JSON sang các đối tượng Python phức tạp. Trong trường hợp của chúng tôi, nó chuyển đổi một bộ Python thành json và json để đặt.

Mô-đun jsonpickle cho phép các cấu trúc dữ liệu phức tạp hơn được tuần tự hóa thành JSON. Ngoài ra, mô-đun jsonpickle is có khả năng cấu hình cao và có thể mở rộng.

Làm theo các bước dưới đây để chuyển đổi chuỗi Đặt thành json.

Bước 1: Cài đặt mô-đun jsonpickle

Để làm việc với mô-đun jsonpickle, trước tiên bạn phải cài đặt nó vào hệ thống của mình.

python3 -m pip install jsonpickle

Bước 2: Nhập mô-đun jsonpickle

Để sử dụng mô-đun jsonpickle trong Python, hãy sử dụng câu lệnh nhập.

import jsonpickle

Bước 3: Xác định một tập hợp và in các giá trị và kiểu dữ liệu của nó.

Để xác định một tập hợp trong Python, hãy sử dụng dấu ngoặc nhọn và đặt các giá trị được phân tách bằng dấu phẩy bên trong dấu ngoặc.

import jsonpickle

set_data = {'Vlad Tepes', 'Alucard', 'Trevor', 'Isaac'}
print(set_data)
print(type(set_data))

Bước 4: Sử dụng phương thức jsonpickle.encode () để chuyển đổi thành json

Phương thức jsonpickle.encode () được sử dụng để chuyển đổi đối tượng thành một chuỗi JSON.

json_data = jsonpickle.encode(set_data)

Bây giờ, in giá trị của json_data và kiểu dữ liệu của nó.

import jsonpickle

set_data = {'Vlad Tepes', 'Alucard', 'Trevor', 'Isaac'}
print(set_data)
print(type(set_data))
print("----------After converting set to json-----------")
json_data = jsonpickle.encode(set_data)
print(json_data)
print(type(json_data))

Đầu ra

{'Isaac', 'Vlad Tepes', 'Trevor', 'Alucard'}
<class 'set'>
----------After converting set to json-----------
{"py/set": ["Isaac", "Vlad Tepes", "Trevor", "Alucard"]}
<class 'str'>

Bạn có thể thấy rằng chúng tôi đã nhận được chuỗi json sau khi sử dụng jsonpickle.encode () phương pháp.

Chuyển đổi JSON thành Đặt bằng phương thức jsonpickle.decode ()

Để tạo lại tập hợp Python từ Chuỗi JSON, hãy sử dụng phương thức jsonpickle.decode ().

import jsonpickle

set_data = {'Vlad Tepes', 'Alucard', 'Trevor', 'Isaac'}
print(set_data)
print(type(set_data))
print("----------After converting set to json-----------")
json_data = jsonpickle.encode(set_data)
print(json_data)
print(type(json_data))
print("----------After converting json to set-----------")
decoded_set = jsonpickle.decode(json_data)
print(decoded_set)
print(type(decoded_set))

Đầu ra

{'Vlad Tepes', 'Trevor', 'Isaac', 'Alucard'}
<class 'set'>
----------After converting set to json-----------
{"py/set": ["Vlad Tepes", "Trevor", "Isaac", "Alucard"]}
<class 'str'>
----------After converting json to set-----------
{'Vlad Tepes', 'Trevor', 'Isaac', 'Alucard'}
<class 'set'>

Và chúng tôi nhận được đối tượng Python ban đầu của mình, một Tập hợp và chúng tôi đã xác minh điều đó bằng cách kiểm tra kiểu dữ liệu của nó.

Có một cách tiếp cận nữa có thể làm cho Set có thể tuần tự hóa được, nhưng chúng ta cần tạo một bộ mã hóa từ đầu bằng cách sử dụng thư viện json và JSONEncoder.

Sử dụng JSONEncoder tùy chỉnh

Để chuyển đổi Set thành Chuỗi JSON, hãy viết một bộ mã hóa tùy chỉnh để tuần tự hóa Python Set thành JSON. Mô-đun json Python cung cấp một bộ mã hóa JSONE để mã hóa các đối tượng Python thành JSON. Chúng tôi có thể mở rộng bằng cách triển khai mặc định() phương pháp để chuyển đổi các bộ có thể tuần tự hóa JSON.

Lớp JSONEncoder có mặc định() phương thức này sẽ được sử dụng để thực thi phương thức JSONEncoder.encode (). Phương thức này chỉ chuyển đổi các kiểu cơ bản thành JSON.

Làm theo các bước bên dưới để tạo bộ mã hóa JSONEnc tùy chỉnh và chuyển Tập hợp thành chuỗi json.

Bước 1: Nhập các mô-đun bắt buộc

Chúng tôi sẽ sử dụng hai phương pháp của mô-đun json. Vì vậy, nhập hai phương thức ở đầu tệp.

from json import dumps
from json import JSONEncoder

Bước 2: Xác định bộ mã hóa JSONE tùy chỉnh

Hãy xác định lớp set_encoder.

class set_encoder(JSONEncoder):
    def default(self, obj):
        return list(obj)

Sử dụng lớp này, bây giờ chúng ta có thể sử dụng phương thức encode () để chuyển Set thành một chuỗi json.

Bước 3: Xác định tập mẫu và sử dụng phương thức encode ().

Hãy xác định một tập mẫu, sau đó chúng ta sẽ chuyển đổi.

set_data = {'Vlad Tepes', 'Alucard', 'Trevor', 'Isaac'}

Bây giờ, chúng ta sẽ sử dụng phương thức set_encoder (). Encode () và chuyển set_data làm tham số trả về chuỗi json. Vì vậy, mã đầy đủ của chúng tôi trông như thế này.

from json import dumps
from json import JSONEncoder


class set_encoder(JSONEncoder):
    def default(self, obj):
        return list(obj)


set_data = {'Vlad Tepes', 'Alucard', 'Trevor', 'Isaac'}
print(set_data)
print("----------After converting set to json-----------")
json_data = set_encoder().encode(set_data)
print(json_data)
print(type(json_data))

Đầu ra

{'Trevor', 'Alucard', 'Vlad Tepes', 'Isaac'}
----------After converting set to json-----------
["Trevor", "Alucard", "Vlad Tepes", "Isaac"]
<class 'str'>

Đó là nó. Chúng tôi đã xây dựng thành công một bộ mã hóa để chuyển đổi bất kỳ đối tượng nào thành một chuỗi json.

Một cách khác là sử dụng bộ mã hóa json tùy chỉnh với phương thức dumps (). Hãy xem làm thế nào để làm điều đó.

Các json.dumps () phương thức có thể chấp nhận một bộ mã hóa tùy chỉnh làm đối số và trả về chuỗi được mã hóa.

from json import dumps
from json import JSONEncoder


class set_encoder(JSONEncoder):
    def default(self, obj):
        return list(obj)


set_data = {'Vlad Tepes', 'Alucard', 'Trevor', 'Isaac'}
print(set_data)
print("----------Using dumps() method to convert set to json-----------")
json_data = dumps(set_data, indent=4, cls=set_encoder)
print(json_data)
print(type(json_data))

Đầu ra

{'Vlad Tepes', 'Isaac', 'Alucard', 'Trevor'}
----------Using dumps() method to convert set to json-----------
[
    "Vlad Tepes",
    "Isaac",
    "Alucard",
    "Trevor"
]
<class 'str'>

Và chúng tôi nhận được kết quả tương tự, tất nhiên, với thụt lề.

Chuyển đổi chuỗi JSON thành Đặt bằng bộ giải mã tùy chỉnh

Đến đổi json sợi dây đến Python bộsử dụng sự kết hợp của json.loads ()bộ() phương pháp.

from json import dumps, JSONEncoder, loads


class set_encoder(JSONEncoder):
    def default(self, obj):
        return list(obj)


set_data = {'Vlad Tepes', 'Alucard', 'Trevor', 'Isaac'}
print(set_data)
print("----------Using dumps() method to convert set to json-----------")
json_data = dumps(set_data, indent=4, cls=set_encoder)
print(json_data)
print(type(json_data))
print("----------Using set(loads()) method to convert json to set-----------")
set_obj = set(loads(json_data))
print(set_obj)
print(type(set_obj))

Đầu ra

{'Trevor', 'Vlad Tepes', 'Alucard', 'Isaac'}
----------Using dumps() method to convert set to json-----------
[
    "Trevor",
    "Vlad Tepes",
    "Alucard",
    "Isaac"
]
<class 'str'>
----------Using set(loads()) method to convert json to set-----------
['Trevor', 'Vlad Tepes', 'Alucard', 'Isaac']
<class 'set'>

Đầu ra

{'Alucard', 'Vlad Tepes', 'Trevor', 'Isaac'}
----------Using dumps() method to convert set to json-----------
[
    "Alucard",
    "Vlad Tepes",
    "Trevor",
    "Isaac"
]
<class 'str'>
----------Using set(loads()) method to convert json to set-----------
{'Alucard', 'Vlad Tepes', 'Trevor', 'Isaac'}
<class 'set'>

Phương thức load () trả về danh sách và chúng ta có thể chuyển đổi một danh sách thành một tập hợp bằng cách sử dụng phương thức set ().

Đó là nó cho hướng dẫn này.

Python được đặt thành dict

Python được đặt thành chuỗi

Python được đặt thành danh sách