Flask 的 jsonify 函数与 flask-marshmallow 不一致
Flask's jsonify function inconsistent with flask-marshmallow
我正在使用 flask-RESTful 开发一个 API 并且遇到了 Flask 的 jsonify 函数的问题。我正在使用 flask-marshmallow 进行 JSON 序列化。下面是一个非常简化的代码片段:
result = activities_schema.dump(activities)
return jsonify(result)
在本地,端点将 return json 具有键 'data' 和 'errors';然而,当 运行 在 Linux 服务器上时,这个 return 是一个包含列表和字典的结果,没有 'data' 和 'errors' 键。
我已经确定这种不一致是由 Flask 的 jsonify 函数引起的,它在 return 被 API 编辑之前打印出结果。在本地和服务器上,'result' 等于:
MarshalResult(data=[], errors={})
然而,当我在使用 Flask 的 jsonify 后打印响应时,我在本地得到了这个:
('{\n "data": [], \n "errors": {}\n}', '\n')
在服务器上打印时:
('[\n [], \n {}\n]', '\n')
有人知道为什么这些不匹配吗?
我研究了更多,找到了一个问题的解决方案(我觉得有点傻,因为解决方案在文档中是正确的),但无法解释为什么原来的问题发生了。
解决方案(找到 here)是使用:
jsonify(result.data)
或:
activities_schema.jsonify(result)
这两种方法都return只是数据,而不是错误。
我仍然无法解释为什么以另一种方式执行此操作在服务器和我的本地计算机之间不一致,但也许这是一个不同的问题。
我正在使用 flask-RESTful 开发一个 API 并且遇到了 Flask 的 jsonify 函数的问题。我正在使用 flask-marshmallow 进行 JSON 序列化。下面是一个非常简化的代码片段:
result = activities_schema.dump(activities)
return jsonify(result)
在本地,端点将 return json 具有键 'data' 和 'errors';然而,当 运行 在 Linux 服务器上时,这个 return 是一个包含列表和字典的结果,没有 'data' 和 'errors' 键。
我已经确定这种不一致是由 Flask 的 jsonify 函数引起的,它在 return 被 API 编辑之前打印出结果。在本地和服务器上,'result' 等于:
MarshalResult(data=[], errors={})
然而,当我在使用 Flask 的 jsonify 后打印响应时,我在本地得到了这个:
('{\n "data": [], \n "errors": {}\n}', '\n')
在服务器上打印时:
('[\n [], \n {}\n]', '\n')
有人知道为什么这些不匹配吗?
我研究了更多,找到了一个问题的解决方案(我觉得有点傻,因为解决方案在文档中是正确的),但无法解释为什么原来的问题发生了。
解决方案(找到 here)是使用:
jsonify(result.data)
或:
activities_schema.jsonify(result)
这两种方法都return只是数据,而不是错误。
我仍然无法解释为什么以另一种方式执行此操作在服务器和我的本地计算机之间不一致,但也许这是一个不同的问题。