2014-04-15 17 views
6

Tôi có một lớp tùy chỉnh, chúng ta hãy gọi là lớp ObjectA(), và nó có một loạt các hàm, thuộc tính, vv .. và tôi muốn tuần tự hóa đối tượng bằng thư viện json chuẩn trong python , tôi phải làm gì để đối tượng này sẽ tuần tự hóa thành JSON mà không cần viết bộ mã hóa tùy chỉnh?Tạo một lớp tùy chỉnh JSON serializable

Cảm ơn bạn

+0

Có lẽ một dupe của câu hỏi này: http://stackoverflow.com/questions/3768895/python-how-to-make -a-class-json-serializable – dano

Trả lời

6

Phân lớp json.JSONEncoder, rồi xây dựng từ điển hoặc từ điển phù hợp.

Xem "Mở rộng JSONEncoder" đằng sau this link

Như thế này:

>>> class A: pass 
... 
>>> a = A() 
>>> a.foo = "bar" 
>>> import json 
>>> 
>>> class MyEncoder(json.JSONEncoder): 
... def default(self, obj): 
...  if isinstance(obj, A): 
...   return { "foo" : obj.foo } 
...  return json.JSONEncoder.default(self, obj) 
... 
>>> json.dumps(a, cls=MyEncoder) 
'{"foo": "bar"}' 
+4

'mà không cần viết bộ mã hóa tùy chỉnh ' – Ford

+2

Không thể nếu không có bộ mã hóa tùy chỉnh. Nếu tiền đề của câu hỏi là json chưa biết cách mã hóa nó, thì mọi giải pháp sẽ liên quan đến bộ mã hóa tùy chỉnh. Có lẽ không phải là một mở rộng JSONEncoder - bạn có thể viết một đơn giản f() mà ánh xạ một đối tượng vào một dict - nhưng điều gì sẽ được, nếu không phải là một bộ mã hóa tùy chỉnh? – FrobberOfBits

+0

Nên đề cập rằng trong câu trả lời của bạn để OP biết nó không thể, và những gì các tùy chọn khác (nếu có) có. Xin lỗi nếu tôi ra một chút thô lỗ. – Ford

Các vấn đề liên quan