【问题标题】:Jsonify a list of custom objectsJsonify 自定义对象列表
【发布时间】:2015-05-08 17:35:15
【问题描述】:

我目前有以下:

class MainError:
    def __init__(self, code, message, errorsList):
        self.code = code
        self.message = message
        # List of Error objects
        self.errorsList = errorsList

    def serialize(self):  
        return {           
        'mainErrorCode': self.code, 
        'message': self.message,
        'errors': self.errorsList         
        }


class Error:    
    def __init__(self, field, message):
        self.field = field
        self.message = message

所以我想以以下格式返回JSON

{
  "mainErrorCode" : 1024,
  "message" : "Validation Failed",
  "errors" : [
    {
      "field" : "first_name",
      "message" : "First name cannot have fancy characters"
    },
    {
      "field" : "password",
      "message" : "Password cannot be blank"
    }
  ]
}

目前我收到错误:

TypeError: <errors.Error instance at 0x329b908> is not JSON serializable

我正在使用Flask's Jsonify

return jsonify(errors=mainError.serialize())

我猜是list 导致了这个问题。有人可以帮我解决这个问题吗?

PS:我的方法中可能还有一些其他明显的错误(我对 Python 很陌生 =/)

更新的解决方案

def serialize(self):  
     return {           
     'mainErrorCode': self.code, 
     'message': self.message,
     'errors': [error.serialize() for error in self.errorsList] 
     }

class Error:    
    def __init__(self, field, message):
        self.field = field
        self.message = message

    def serialize(self): 
        return {           
        'field': self.field, 
        'message': self.message
        }

【问题讨论】:

  • 我认为这不是缩进(serialize 是模块级别)?另外,ErrorMainError 之间的关系(或层次结构)是什么?如何执行?
  • @ReutSharabani 我没有收到任何缩进错误。我写的方式有问题吗?
  • 这不是错误,但序列化可能应该是MainError 的一部分。不过我不确定。
  • 哦,哎呀..是的,对不起!当我发布问题时,我没有正确缩进。我会解决的。
  • 我把它们写在同一个module中。 MainError 对象将包含 Error 对象的列表 (errorsList)。

标签: python json flask


【解决方案1】:

正如错误提示的那样,您有一个不可序列化的Error 对象列表。所以让它们可序列化:

class Error:    

    def __init__(self, field, message):
        self.field = field
        self.message = message

    def serialize(self):  
        return {           
            'field': self.field, 
            'message': self.message
        }

【讨论】:

  • 感谢路透社。我已经根据您提到的内容包含了我的新解决方案。 for loop是调用serialize函数的正确方式吗?
猜你喜欢
  • 2014-02-20
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-21
相关资源
最近更新 更多