转储前的json.dump对象重命名属性

时间:2013-07-29 13:18:51

标签: python json

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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()更明确一点,即您在结果中重命名一个键。