Tôi cần biết cách chuyển đổi một đối tượng python động thành JSON. Đối tượng phải có thể có nhiều cấp đối tượng đối tượng đối tượng con. Ví dụ
class C[]: pass
class D[]: pass
c = C[]
c.dynProperty1 = "something"
c.dynProperty2 = { 1, 3, 5, 7, 9 }
c.d = D[]
c.d.dynProperty3 = "d.something"
# .. convert c to json ...
Sử dụng trăn 2. 6 mã sau
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
mang lại lỗi sau
TypeError: is not JSON serializable
Tôi không biết loại đối tượng con nào mà người dùng có thể đưa vào
{"id": 1, "age": 25, "name": "John"}
7. Có giải pháp nào đủ thông minh để phát hiện xem một thuộc tính có phải là một đối tượng hay không và tự động phân tích cú pháp của nó là {"id": 1, "age": 25, "name": "John"}
8? Nếu bạn muốn chuyển đổi sang đối tượng JSON của một lớp không phải là một phần của các kiểu dựng sẵn trong Python, bạn có thể gặp lỗi
TypeError với "không thể tuần tự hóa JSON"
Trong trường hợp này, bạn có một số tùy chọn
bạn cũng có thể kiểm tra
- Python Json để đọc chính tả
- Cookie ví dụ dưa chua Python
Python chuyển đổi đối tượng lớp thành json [không tích hợp]
Cách dễ nhất để khắc phục lỗi là chỉ cần thêm
{"id": 1, "age": 25, "name": "John"}
8 vào phương thức kết xuấtimport json
class Person[object]:
def __init__[self]:
self.name = 'John'
self.age = 25
self.id = 1
person = Person[]
s = json.dumps[person.__dict__]
print[s]
kết quả
{"id": 1, "age": 25, "name": "John"}
- nhập mô-đun JSON
- khai báo một lớp Người mới
- tạo một thể hiện mới của lớp này
- bán phá giá đối tượng với tùy chọn.
8 - nếu không sẽ có lỗi{"id": 1, "age": 25, "name": "John"}
Python chuyển đổi đối tượng thành chuỗi JSON [có xác thực]
Phương thức tuần tự hóa JSON của các đối tượng không thể tuần tự hóa theo phương thức kết xuất mặc định. Ưu điểm là bạn có thể kiểm tra đối tượng và xử lý nó theo cách tốt nhất cho loại của nó
import json
from datetime import date
class Person[object]:
def __init__[self]:Python save objects as json file
self.name = 'John'
self.age = 25
self.id = 1
person = Person[]
def serialize[obj]:
if isinstance[obj, date]:
serial = obj.isoformat[]
return serial
return obj.__dict__
print[serialize[person]]
kết quả
{"id": 1, "age": 25, "name": "John"}
- chúng tôi đang nhập các mô-đun cần thiết
- khai báo một lớp Người mới
- tạo một thể hiện mới của lớp này
- phương thức tùy chỉnh để kiểm tra xem nó có thể tuần tự hóa được hay không và trả về giá trị phù hợp
Python chuyển đổi đối tượng danh sách thành tệp JSON
Lưu một đối tượng python vào tệp JSON cũng rất dễ dàng
import json
class Person[object]:
def __init__[self]:
self.name = 'John'
self.age = 25
self.id = 1
person = Person[]
#save to file
dt = {}
dt.update[vars[person]]
with open["/home/test/person.txt", "w"] as file:
json.dump[dt, file]
kết quả
/nhà/kiểm tra/người. txt
{"id": 1, "age": 25, "name": "John"}
Nếu bạn muốn lưu danh sách các đối tượng bằng Python vào JSON, bạn có thể thực hiện bằng cách
json_string = json.dumps[[ob.__dict__ for ob in list_objects]]
nếu bạn xử lý các đối tượng không thể tuần tự hóa thì bạn chỉ cần làm
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
0nơi list_objects là danh sách với các đối tượng của bạn
P. S. Ví dụ về mã đã được hỏi trong phần nhận xét bên dưới hoặc ví dụ đầy đủ về cách bạn có thể tuần tự hóa các lớp không thể tuần tự hóa
JSON là viết tắt của Ký hiệu đối tượng JavaScript. Mặc dù tên của nó chỉ ra rằng nó được liên kết với ngôn ngữ lập trình JavaScript, nhưng định dạng JSON độc lập với ngôn ngữ và thường được sử dụng trong nhiều ngôn ngữ lập trình khác nhau
Tệp JSON là gì?
Các tệp JSON thường được sử dụng để truyền dữ liệu giữa các máy tính. Chẳng hạn, khi tải xuống một tệp từ API, bạn thường cần xử lý các tệp JSON. Đây là một bài viết hay giải thích việc tải xuống một tệp bằng Python từ API
Sau đây là một ví dụ về tệp JSON
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
1Các tệp lưu trữ dữ liệu ở định dạng JSON được gọi là tệp JSON. Các tệp này dựa trên văn bản, con người có thể đọc được và dễ xử lý – tất cả đều khiến chúng trở nên rất phổ biến
Trong bài viết này, chúng ta sẽ tìm hiểu cách chuyển đổi một chuỗi thành JSON trong Python và cách tạo tệp JSON từ các đối tượng Python
Làm việc với các tệp JSON trong Python
Python có một thư viện tích hợp có tên là
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
20 cung cấp các phương thức đơn giản và hiệu quả để làm việc với các tệp JSON. Hãy xem qua một số ví dụ minh họa cách chuyển đổi một chuỗi thành JSON trong Python và ngược lạiTừ JSON đến đối tượng Python. khử lưu huỳnh
Sau đây là một chuỗi JSON
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
2Chúng ta có thể sử dụng phương thức
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
21 của thư viện import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
20 để chuyển đổi chuỗi này thành đối tượng Pythonimport json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
6Chúng tôi vừa chuyển đổi dữ liệu được mã hóa JSON thành một đối tượng Python. Quá trình này được gọi là deserializing. Đối tượng Python kết quả là một từ điển. Một từ điển Python bao gồm các cặp khóa-giá trị và chúng ta có thể dễ dàng truy cập các mục của nó bằng các khóa. Ví dụ: nếu chúng tôi muốn truy cập
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
23 trong từ điển import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
24, chúng tôi viếtimport json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
9Nếu chúng ta có một tệp JSON và muốn biến nó thành một đối tượng Python, chúng ta có thể sử dụng phương thức
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
25. Xem nhanh file JSON của “employee” ở đầu bài viết. Khối mã sau đọc tệp này và lưu nó vào từ điển PythonTypeError: is not JSON serializable
1Bây giờ
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
26 là một đối tượng từ điển PythonĐiều quan trọng là phải nhấn mạnh sự khác biệt giữa các phương pháp
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
28] và import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
21 của thư viện import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
20. Phương thức tải được sử dụng để tạo đối tượng Python từ tệp JSON, trong khi phương thức import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
21 chuyển đổi chuỗi JSON thành đối tượng PythonTừ đối tượng Python đến chuỗi JSON. tuần tự hóa
Giống như chúng ta có thể tạo đối tượng Python từ tệp JSON, chúng ta có thể chuyển đổi đối tượng Python thành chuỗi hoặc tệp JSON. Quá trình này được gọi là tuần tự hóa
Phương thức
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
61 chuyển đổi từ điển Python thành chuỗi JSON. Trong phần khử lưu huỳnh, chúng tôi đã tạo một từ điển có tên là import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
24. Nó có thể được chuyển đổi lại thành chuỗi JSON như sauTypeError: is not JSON serializable
9Đầu ra là một chuỗi [chú ý các dấu ngoặc đơn xung quanh dấu ngoặc nhọn], vì vậy chúng ta không thể truy cập một cặp khóa-giá trị cụ thể như chúng ta làm với từ điển
Chuỗi rất đơn giản này không khó đọc. Tuy nhiên, các chuỗi JSON có thể dài hơn nhiều và có các phần lồng vào nhau. Đối với những trường hợp như vậy, phương pháp
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
61 cung cấp cách in dễ đọc hơn. Chúng tôi có thể in chuỗi này đẹp bằng cách đặt tham số thụt lề tùy chọnimport json
class Person[object]:
def __init__[self]:
self.name = 'John'
self.age = 25
self.id = 1
person = Person[]
s = json.dumps[person.__dict__]
print[s]
1Phương thức
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
61 cũng có một tham số để sắp xếp theo khóaimport json
class Person[object]:
def __init__[self]:
self.name = 'John'
self.age = 25
self.id = 1
person = Person[]
s = json.dumps[person.__dict__]
print[s]
3Các tệp JSON thường được sử dụng để tuần tự hóa [chọn], e. g. khi bạn muốn duy trì một số dữ liệu giữa các lần chạy ứng dụng của mình. Bạn có thể tìm hiểu thêm về tuần tự hóa đối tượng trong bài viết này
Tạo tệp JSON bằng kết xuất []
Phương thức
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
61 chuyển đổi đối tượng Python thành chuỗi có định dạng JSON. Chúng tôi cũng có thể tạo tệp JSON từ dữ liệu được lưu trữ trong từ điển Python. Phương pháp để thực hiện nhiệm vụ này là import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
66Hãy sử dụng phương pháp
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
66 để tạo tệp JSON. Chúng tôi sẽ sử dụng từ điển nhân viên mà chúng tôi đã tạo trong phần trướcimport json
class Person[object]:
def __init__[self]:
self.name = 'John'
self.age = 25
self.id = 1
person = Person[]
s = json.dumps[person.__dict__]
print[s]
7Thao tác này tạo một tệp có tên
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
68 trong thư mục làm việc hiện tại của bạn và mở nó ở chế độ ghi. Sau đó, chúng tôi sử dụng phương pháp import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
66 để tuần tự hóa một từ điển PythonPhương thức
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
66 nhận hai đối số vị trí. Đối tượng đầu tiên là đối tượng lưu trữ dữ liệu sẽ được tuần tự hóa [ở đây, từ điển Python]. Cái thứ hai là tệp để ghi dữ liệu được tuần tự hóa. Tham số import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
91 là tùy chọnIn trong dòng lệnh
Phương thức
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
92 của thư viện import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
20 cho phép in các tệp JSON đẹp mắt trong dòng lệnh. Hãy thử nó trên tệp import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
68 mà chúng tôi đã tạo trong phần trướcBước đầu tiên là mở giao diện dòng lệnh. Sau đó, chúng ta cần thay đổi thư mục thành vị trí lưu tệp
import json
class C[]: pass
class D[]: pass
c = C[]
c.what = "now?"
c.now = "what?"
c.d = D[]
c.d.what = "d.what"
json.dumps[c.__dict__]
68Lệnh sau sẽ in tệp JSON ở định dạng đẹp, rõ ràng
{"id": 1, "age": 25, "name": "John"}
6Hình ảnh sau đây cho thấy giao diện của nó trong dấu nhắc lệnh của Windows
Tìm hiểu thêm về JSON và Python
Chúng tôi đã giới thiệu cách đọc và ghi các tệp JSON bằng Python. Thư viện json tích hợp giúp bạn dễ dàng thực hiện cả hai điều này. Một trong những ưu điểm của Python là sự lựa chọn phong phú của các thư viện bên trong và bên thứ ba giúp đơn giản hóa hầu hết các tác vụ
Nếu bạn đang học hoặc dự định học Python, bài học Học lập trình với Python của chúng tôi là một cách tuyệt vời để bắt đầu. Nó được thiết kế cho người mới bắt đầu và có 5 khóa học tương tác. Ưu điểm của việc học với một khóa học tương tác là bạn được thực hành viết mã thực tế;
HọcPython. com cũng cung cấp toàn bộ khóa học dành riêng cho Tệp JSON trong Python. Khóa học cũng tương tác và có 35 bài tập. Nếu bạn muốn thực hành các khái niệm mà chúng ta đã thảo luận trong bài viết này, thì khóa học này là dành cho bạn. học tập vui vẻ