代码之家  ›  专栏  ›  技术社区  ›  ikhsanudinhakim

如果python中的字段为空,返回json字段的优雅方法

  •  1
  • ikhsanudinhakim  · 技术社区  · 7 年前

    关于我的烧瓶架API,我有一个愚蠢的问题。如果我有一个包含大量信息的用户模型,我想将其作为JSON返回。但有些信息仍然没有任何值(空)。将其作为空字符串或其他默认值返回而不是作为空值返回的优雅方式是什么?

    像这样:

    { 
      'username': 'foo',
      'fullname' : ''
    }
    

    而不是这个:

    { 
      'username': 'foo',
      'fullname' : null
    }
    

    这是我的职责:

    def json(self):
            return {
                'username': self.phone,
                'fullname': self.fullname
            }
    

    这是用户模型:

    class UserModel(db.Model):
        __tablename__ = 'users'
    
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(80))
        password = db.Column(db.String(80))
        fullname = db.Column(db.String(80)) 
    
    3 回复  |  直到 7 年前
        1
  •  3
  •   RomanPerekhrest    7 年前

    sqlalchemy.schema.Column 类允许指定 default= 参数:

    class UserModel(db.Model):
        __tablename__ = 'users'
    
        id = db.Column(db.Integer, primary_key=True)
        username = db.Column(db.String(80))
        password = db.Column(db.String(80))
        fullname = db.Column(db.String(80), default="") 
    

    https://docs.sqlalchemy.org/en/latest/core/metadata.html#sqlalchemy.schema.Column.params.default

        2
  •  1
  •   DeepSpace    7 年前

    一种方法是在你的回信口述中有条件:

    def json(self):
            return {
                'username': self.phone if self.phone else '',
                'fullname': self.fullname if self.fullname else ''
            }
    
        3
  •  0
  •   Sergey Elkin    7 年前

    基本上,如果你想覆盖 None 在python中的值,可以使用 or 这样的操作员:

    def json(self):
        return {
            'username': self.phone,
            'fullname': self.fullname or 'some default value'
        }
    

    万一 self.fullname 有一个值,它将被返回。但如果是 没有 然后 'some default value' 上来了。

    希望有帮助。