简体   繁体   English

Jsonify自定义对象列表

[英]Jsonify a list of custom objects

I currently have the following: 我目前有以下内容:

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

So I would like to return JSON in the format: 所以我想以以下格式返回JSON

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

Currently I am getting the error: 目前我收到错误:

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

I am using Flask's Jsonify . 我正在使用Flask's Jsonify

return jsonify(errors=mainError.serialize())

I'm guessing that the list is causing the issue. 我猜这个list导致了这个问题。 Could someone please help me with the right way of going about this? 有人可以用正确的方式帮我解决这个问题吗?

PS: There might be some other glaring errors in my approach (I'm quite new to Python =/) PS:我的方法可能还有其他一些明显的错误(我对Python = /很新)

Updated Solution 更新方案

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
        }

As the error suggests, you have a list of Error objects that are not serializable. 如错误所示,您有一个不可序列化的Error对象列表。 So make them serializable: 所以让它们可序列化:

class Error:    

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

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM