【问题标题】:Flask-Restful - Return json with nested arrayFlask-Restful - 返回带有嵌套数组的 json
【发布时间】:2016-07-04 02:06:03
【问题描述】:

我的模型包含用户和书籍。我想将所有书籍作为对象数组嵌套在每个用户对象中,以显示每个用户拥有的书籍。我正在尝试使用 marshal 将书籍作为列表嵌套在用户字段中,但没有任何反应。在响应中,只有用户数组,但没有书籍轨迹,也没有错误。思路是这样的:

books_fields = {
    'id': fields.Integer,
    'type' : fields.String,
    'created_at': fields.DateTime,
    'user_id' : fields.Integer
}

users_fields = {
    'id': fields.Integer,
    'name' : fields.String,
    'created_at': fields.DateTime,
    'books': fields.List(fields.Nested(books_fields))
}


users = session.query(model.Users).outerjoin(model.Cities)
         .filter_by(weather = args.weather).all()

for user in users:
    books = session.query(model.Books).outerjoin(model.Users)
             .filter_by(user_id = user.id).all()
    user.books = marshal(books, books_fields)


return {'users': marshal(users, users_fields)}, 200

问题是书籍没有出现。

【问题讨论】:

    标签: python json serialization flask flask-restful


    【解决方案1】:

    我相信您需要为users 手动创建字典。 Marshal 从来没有以这种方式为我工作过(这是假设您的图书查询正在返回行)。

    试试这样的:

    books_fields = {
        'id': fields.Integer,
        'type' : fields.String,
        'created_at': fields.DateTime,
        'user_id' : fields.Integer
    }
    
    users_fields = {
        'id': fields.Integer,
        'name' : fields.String,
        'created_at': fields.DateTime,
        'books': fields.List(fields.Nested(books_fields))
    }
    
    users_dict = {}
    
    users = session.query(model.Users).outerjoin(model.Cities)
             .filter_by(weather = args.weather).all()
    
    for user in users:
        books_dict = {}
        books = session.query(model.Books).outerjoin(model.Users)
                 .filter_by(user_id = user.id).all()
        for book in books:
            book_dict = {
                'id': book.id,
                'type': book.type,
                'created_at': book.created_at
            }
            books_dict.append(book_dict)
    
        user_dict = {
            'id': user.id,
            'name': user.name,
            'created_at': user.created_at,
            'books': books_dict
        }
        users_dict.append(user_dict)
    
    return {'users': marshal(users_dict, users_fields)}, 200 
    

    【讨论】:

      猜你喜欢
      • 2016-11-22
      • 1970-01-01
      • 2018-08-09
      • 2022-06-13
      • 1970-01-01
      • 2019-01-12
      • 2015-01-08
      • 2017-03-26
      • 1970-01-01
      相关资源
      最近更新 更多