为什么Flask不使用我的自定义json_encoder?

Way*_*ner 6 python json flask

我有以下应用和测试:

app.py

from json import JSONEncoder                                                       
from flask import Flask, jsonify                                                   

class CustomJSONEncoder(JSONEncoder):                                              
    def default(self, obj):                                                        
        return {"hello": "world"}                                                  


app = Flask(__name__)                                                              
app.json_encoder = CustomJSONEncoder                                               


@app.route('/')                                                                    
def main():                                                                        
    return jsonify({'yep': 'this worked'})                                         


if __name__ == '__main__':                                                         
    app.run()  
Run Code Online (Sandbox Code Playgroud)

test_app.py

import json                                                                     
from app import app                                                             


def test_this_should_work():                                                    
    test_client = app.test_client()                                             

    rv = test_client.get('/')                                                   

    assert json.loads(rv.data.decode()) == {'hello': 'world'}   
Run Code Online (Sandbox Code Playgroud)

从我的例子中可以看出,我的代码应该工作并返回另一个字典.但事实并非如此.你可以通过python app.py或运行它py.test(如果你安装py.test),你会发现两次都返回{"yep": "this worked"}.

这里出了点问题 - 我错过了什么?

dav*_*ism 5

这不是Flask的问题,它会发送自定义编码器.这就是Python的json库的工作方式.default仅当无法识别被转储的对象时,才会调用该函数.因为你要转储一个字符串,这是一个由库识别的类型,所以它只是按原样转储.

如果要转换数据,请在序列化之前进行转换.


最近出现在Flask问题跟踪器上.