gpt4 book ai didi

python - 如何在 Python 3 中将具有属性的对象转换为不带 "_"的 JSON?

转载 作者:太空狗 更新时间:2023-10-30 00:40:04 24 4
gpt4 key购买 nike

我想将 Python 对象转换为 JSON 格式。

User 类的私有(private)属性是使用属性定义的。我找到的方法 to_Json() here

class User:
def __init__(self):
self._name = None
self._gender = None

@property
def name(self):
return self._name

@name.setter
def name(self, name):
self._name = name

@property
def gender(self):
return self._gender

@gender.setter
def gender(self, gender):
self._gender = gender

def to_Json(self):
return json.dumps(self, default=lambda o: o.__dict__, allow_nan=False, sort_keys=False, indent=4)

使用这个类和方法的输出是:

{
"_name": "Peter",
"_age": 26
}

摆脱 JSON 格式下划线的最简单方法是什么? (我想要“name”而不是“_name”)删除类中的下划线不是一个选项,因为我得到一个错误(最大递归深度)。我认为重命名属性的方法可以解决这个问题,但这是最好的解决方案吗?

重命名 json.dumbs 之前的所有键(参见 here)不是一种实用的方法,因为我的类比上面的示例更复杂。

那么,尽快将 Python 对象转换为 JSON 格式的最佳做法是什么?

最佳答案

如果您发布的示例代码反射(reflect)了您的真实代码,那么这些属性根本就没有任何理由。你可以这样做:

class User(object):
def __init__(self):
self.name = None
self.age = None

因为无论如何您并没有真正向用户隐藏下划线和属性后面的任何内容。

如果您确实需要进行转换,我喜欢在自定义编码器中进行:

class MyEncoder(json.JSONEncoder):
def default(self, o):
return {k.lstrip('_'): v for k, v in vars(o).items()}

json_encoded_user = json.dumps(some_user, cls=MyEncoder)

关于python - 如何在 Python 3 中将具有属性的对象转换为不带 "_"的 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31813111/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com