Có nhiều cách bạn có thể chuyển đổi một đối tượng JSON sang các lớp Python. Công cụ này sử dụng một trong những cách này sử dụng các chức năng tĩnh để ánh xạ các giá trị khóa từ điển để nhập các thuộc tính và lớp Python an toàn. Dưới đây là các bước để chuyển đổi JSON sang các lớp Python: & nbsp;
1. Tạo một dữ liệu cho mỗi nút gốc JSON
Ví dụ, hãy lấy chuỗi JSON dưới đây làm ví dụ và làm việc với nó trong các bước:
{
"Test":
{
"id":4,
"userid":"user_id_value",
"users":[
{
"id":"2",
"name":"Test"
},
{
"id":"6",
"name":"Test Child 1"
}
]
}
}
Chúng ta có thể thấy rằng chúng ta cần tạo hai lớp: "kiểm tra" và "người dùng" vì "người dùng" thuộc tính là một mảng đối tượng có "id" và "tên".
Chúng ta có thể viết các lớp Python của mình cùng với các thuộc tính của chúng như vậy:
from dataclasses import dataclass
from typing import List
@dataclass
class User:
id: str
name: str
@dataclass
class Test:
id: int
userid: str
users: List[User]
Trong Python, thật dễ dàng để tải chuỗi JSON vào từ điển và truy cập các giá trị bằng cách gọi các khóa từ điển. Điều này có thể được thực hiện bằng cách sử dụng
x = json.loads [my_json_string]
và truy cập các giá trị từ điển bằng cách sử dụng x ["my_json_key"]]
Tuy nhiên, việc dịch các mục từ điển này để nhập các thuộc tính Python an toàn đòi hỏi một vài bước bổ sung mà chúng ta cần làm.
2. Ánh xạ từng thuộc tính JSON cho một thuộc tính Python an toàn
Bước tiếp theo cần được thực hiện là ánh xạ từng nút JSON và các thuộc tính cho các lớp và thuộc tính Python. Chúng ta có thể làm như vậy bằng cách tạo một phương pháp tĩnh trong các lớp Python chịu trách nhiệm lập bản đồ từ điển của chúng ta đến các thuộc tính Python của chúng ta. Kịch bản Python sẽ trông như thế này:
from dataclasses import dataclass
from typing import Any, List
@dataclass
class User:
id: str
name: str
@staticmethod
def from_dict[obj: Any] -> 'User':
_id = int[obj.get["id"]]
_name = str[obj.get["name"]]
return User[_id, _name]
@dataclass
class Test:
id: int
userid: str
users: List[User]
@staticmethod
def from_dict[obj: Any] -> 'Test':
_id = int[obj.get["id"]]
_userid = str[obj.get["userid"]]
_users = [User.from_dict[y] for y in obj.get["users"]]
return Test[_id, _userid, _users]
Chúng tôi tạo một phương thức tĩnh gọi là "From_dic" và bên trong phương thức này, chúng tôi tạo các thuộc tính cục bộ ["_id, _name"] và với mỗi thuộc tính, chúng tôi đang gọi từ điển cung cấp các khóa được tìm thấy trong chuỗi JSON của chúng tôi -> obj.get ["id" ] và sau đó đúc đối tượng đó vào các loại python -> int [obj.get ["id"]]]-> obj.get["id"] and then casting that object to Python types -> int[obj.get["id"]]
Lưu ý rằng đối với các mảng và danh sách, những gì chúng tôi đang làm là chúng tôi đang tạo một danh sách người dùng và cho mỗi người dùng, chúng tôi đang gọi phương thức "From_dict" để các thuộc tính người dùng cũng sẽ được ánh xạ. Điều này có thể được nhìn thấy trong dòng dưới đây: & nbsp;
_users = [User.from_dict[y] for y in obj.get["users"]]
Cuối cùng, chúng tôi đang trả về một đối tượng được ánh xạ như đã thấy trong các dòng cuối cùng của phương thức "From_dict":
return Test[_id, _userid, _users]
3. Bọc đối tượng Python của bạn bằng một lớp gốc
Bạn có thể tùy chọn quấn các đối tượng Python của mình bằng một lớp gốc và đây là trường hợp bạn có nhiều lớp trong nút gốc của chuỗi JSON. & NBSP;
Chúng tôi có thể đạt được điều này bằng cách thêm mã dưới đây vào tập lệnh Python của chúng tôi:
@dataclass
class Root:
Test: Test
@staticmethod
def from_dict[obj: Any] -> 'Root':
_Test = Test.from_dict[obj.get["Test"]]
return Root[_Test]
4. Gọi hàm ánh xạ tại lớp gốc & nbsp;
Cuối cùng, để sử dụng các chức năng ánh xạ của chúng tôi, chúng tôi cần gọi hàm ánh xạ gốc "từ_dict" như vậy: & nbsp;
# Load the json string to a variable
output = json.load[open['data.json']]
# Call the mapping function
result = Root.from_dict[output]
# Access your Python properties
result.Test.userid
5. Sử dụng công cụ trực tuyến ở trên để tạo các lớp Python từ các chuỗi JSON
Bạn luôn có thể sử dụng công cụ trực tuyến ở trên để đạt được những gì chúng tôi đã làm trong ví dụ này. Chỉ cần dán JSON của bạn vào khu vực văn bản bên trái, nhấn nút chuyển đổi đó và bạn sẽ có các lớp Python của mình với ánh xạ của chúng được tạo tự động!
Kịch bản Python đầy đủ sẽ trông như thế này:
from dataclasses import dataclass
from typing import Any, List
import json
@dataclass
class User:
id: str
name: str
@staticmethod
def from_dict[obj: Any] -> 'User':
_id = int[obj.get["id"]]
_name = str[obj.get["name"]]
return User[_id, _name]
@dataclass
class Test:
id: int
userid: str
users: List[User]
@staticmethod
def from_dict[obj: Any] -> 'Test':
_id = int[obj.get["id"]]
_userid = str[obj.get["userid"]]
_users = [User.from_dict[y] for y in obj.get["users"]]
return Test[_id, _userid, _users]
@dataclass
class Root:
Test: Test
@staticmethod
def from_dict[obj: Any] -> 'Root':
_Test = Test.from_dict[obj.get["Test"]]
return Root[_Test]
# Load the json string to a variable
output = json.load[open['data.json']]
# Call the mapping function
result = Root.from_dict[output]
# Access your Python properties
result.Test.userid
Chúng ta có thể thấy ánh xạ Python của chúng ta hoạt động tốt và chúng ta có thể truy cập các thuộc tính của mình như thường lệ: