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

标签 python json

我想将 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/

相关文章:

java - 如何创建没有键的 JSONObject?

读取 Hive 表中的 JSON 数据

javascript - For 循环图片库

python - 使用 python 脚本编译 Latex 文件

python - 根据所选列过滤重复的行并与 Pandas 中的另一个数据框进行比较

python - 如何在 Python 中从一组可能值定义属性?

python - 如何在通过网络抓取创建的 json 文件中组织数据

javascript - TypeError : res. json 不是函数

python - 用 tweepy 发布推文

递归函数中的 Python yield 语句问题?