0

我目前正在通过使用将我的自定义对象序列化为 JSON 字符串json.dumps()

j = json.dumps(object, sort_keys=True, indent=4, separators=(',', ': '),
               default=lambda o: o.__dict__)

我的对象有一个名为_machines. 因此,当我们将对象转换为字符串时,会调用字符串中的一个属性_machines。有没有办法告诉json.dump()我们希望这个属性被调用machines而不是_machines

4

1 回答 1

3

您必须使用更精细的默认值:

json.dumps(object, sort_keys=True,indent=4, separators=(',', ': '), 
           default=lambda o: {'machines' if k == '_machines' else k: v for k, v in o.__dict__.iteritems()})

为了便于阅读,将其设为单独的函数可能是个好主意:

def serialize_custom_object(o):
    res = o.__dict__.copy()
    res['machines'] = res['_machines']
    del res['_machines']
    return res

json.dumps(object, sort_keys=True,indent=4, separators=(',', ': '), 
           default=serialize_custom_object)

在这里,serialize_custom_object()您要重命名结果中的一个键更明确一点。

于 2013-07-29T13:20:36.700 回答