我想序列化所有具有键" manager_objects"的对象。在下面的字典中。最简单的方法是什么?
department {
id: 1,
name: 'ARC',
manager_object: <Object>
sub_department: {
id: 5,
name: 'ABC'
manager_object: <Object>
sub_department: {
id: 7,
name: 'TRW',
manager_object: <Object>
sub_department: {
id: 9,
name: 'MYT',
manager_object: <Object>
sub_deparment: {
id: 12,
name: 'NMY'
manager_object: <Object>
sub_department: {}
}
}
}
}
}
答案 0 :(得分:3)
您可以编写自己的JsonEncoder(或使用@PaulDapolito描述的方法)。但是,只有当您知道具有键tableViewCont = NSBundle.mainBundle().loadNibNamed("comebackTableView", owner: self, options: nil).last as! comebackViewController
tableViewCont.setup()
tableViewCont.frame = CGRectMake(0, 100, self.view.frame.size.width, self.view.frame.height)
的项的类型时,这两种方法才有效。
从docs:要使用自定义JSONEncoder子类(例如,重写default()方法以序列化其他类型),请使用cls kwarg指定它;否则使用JSONEncoder。
manager_object
答案 1 :(得分:2)
如果您的词典包含Python / json
默认不知道如何序列化的对象,则需要将json.dump
或json.dumps
函数作为其default
关键字它告诉它如何序列化这些对象。例如:
import json
class Friend(object):
def __init__(self, name, phone_num):
self.name = name
self.phone_num = phone_num
def serialize_friend(obj):
if isinstance(obj, Friend):
serial = obj.name + "-" + str(obj.phone_num)
return serial
else:
raise TypeError ("Type not serializable")
paul = Friend("Paul", 1234567890)
john = Friend("John", 1234567890)
friends_dict = {"paul": paul, "john": john}
print json.dumps(friends_dict, default=serialize_friend)
答案 2 :(得分:0)
嵌套字典,枚举,日期,时间和日期时间默认情况下无法在Python中序列化。这是我处理这些类型的方法
from datetime import time
from datetime import datetime
from datetime import timedelta
import json
import enum
def to_serializable(val):
"""JSON serializer for objects not serializable by default"""
if isinstance(val, (datetime, date, time)):
return val.isoformat()
elif isinstance(val, enum.Enum):
return val.value
elif hasattr(val, '__dict__'):
return val.__dict__
return val
def to_json(data):
"""Converts object to JSON formatted string"""
return json.dumps(data, default=to_serializable)
# example on how to serialize dict
to_json(mydict.__dict__)