flask中,不能直接return字典,需要把字典转换为json字符串
方式有三种:
1. return str(字典)
2.return json.dumps(字典)
3.return jsonify(字典)
其中,dumps是json模块的方法,jsonify是flask封装的方法

虽然他们返回的都是json字符串,但是是不一样的

0.代码及脚本准备

服务端部分代码

@server.route('/login',methods=['get','post'])
def login():
username = request.values.get('username','').strip()
password = request.values.get('password','').strip()
if username and password:
password = md5_s(password)
sql = 'select id,username from users where username="%s" and password="%s"'%(username,password)
res = op_mysql(sql)
if res:
token = username+str(int(time.time()))
token = md5_s(token)
op_redis(username,token)
response = make_response('{"code":9420, "msg":"恭喜%s,登录成功","token":"%s"}'%(username,token))
response.set_cookie(username,token)
return response
# return '{"code":9420, "msg":"恭喜%s,登录成功","token":"%s"}'%(username,token)
else:
return '{"code":9410,"msg":"用户名或密码不正确"}'
# return json.dumps({"code":9410,"msg":"用户名或密码不正确"},ensure_ascii=False)
# return jsonify({"code":9410,"msg":"用户名或密码不正确"}) # jmeter请求,中文响应乱码;postman请求,中文正常显示
else:
return '{"code":9400,"msg":"用户名和密码不能为空"}'

jmeter脚本

这里用错误的账号和密码来演示

1.返回str(字典)

return '{"code":9410,"msg":"用户名或密码不正确"}'  

jmeter响应结果:中文正常显示

浏览器响应

响应头

2.返回json.dumps(字典)

return json.dumps({"code":9410,"msg":"用户名或密码不正确"}) 

jmeter响应结果:中文未正常显示

msg =  "\u7528\u6237\u540d\u6216\u5bc6\u7801\u4e0d\u6b63\u786e"
res = msg.encode('utf-8')
print(res,type(res))
res = msg.encode('utf-8').decode('utf-8')
print(res,type(res))
print(msg)

结果

b'\xe7\x94\xa8\xe6\x88\xb7\xe5\x90\x8d\xe6\x88\x96\xe5\xaf\x86\xe7\xa0\x81\xe4\xb8\x8d\xe6\xad\xa3\xe7\xa1\xae' <class 'bytes'>
用户名或密码不正确 <class 'str'>
用户名或密码不正确

要想中文正常显示,需要加上:ensure_ascii=False

return json.dumps({"code":9410,"msg":"用户名或密码不正确"},ensure_ascii=False) 

jmeter响应结果:中文正常显示

 

浏览器响应

响应头

3.返回jsonify(字典)

return jsonify({"code":9410,"msg":"用户名或密码不正确"}) 

jmeter响应结果:中文未正常显示 

要想中文正常显示,需要加上:server.config['JSON_AS_ASCII'] = False

jmeter响应结果:中文正常显示

 

浏览器响应

响应头

4.总结

方式一:返回的是: Content-Type:text/html

方式二:返回的是: Content-Type:text/html

方式三:返回的是: Content-Type:application/json

所以,方式三才是真正意义上的json字符串。

flask如何返回真正意义上的json字符串?以及中文如何正常显示?的更多相关文章

  1. PHP:JSON字符串转换为中文,中文转换为JSON字符串

    /** * 中文转换为JSON字符串 * @param $chinese_str 中文:可以包含中文字母数字 * @return string */ function json_encode($chi ...

  2. Retrofit 2.0 超能实践(三),轻松实现文件/多图片上传/Json字符串

    文:http://blog.csdn.net/sk719887916/article/details/51755427 Tamic 简书&csdn同步 通过前两篇姿势的入门 Retrofit ...

  3. Retrofit 2.0 轻松实现多文件/图片上传/Json字符串/表单

    如果嫌麻烦直接可以用我封装好的库:Novate: https://github.com/Tamicer/Novate 通过对Retrofit2.0的前两篇的基础入门和案例实践,掌握了怎么样使用Retr ...

  4. PHP 将数组转换为JSON字符串<兼容中文>

    1 /************************************************************** 2 * 3 * 使用特定function对数组中所有元素做处理 4 ...

  5. PHP中json序列化后中文的编码显示问题

    在接口返回数据中,我们经常会返回json或者xml格式,php的json序列化函数json_encode非常好用,但是默认会把中文编码为ASCII码(注意,很多人认为这是乱码,其实不是),尤其在调试接 ...

  6. httpclient工具类,post请求发送json字符串参数,中文乱码处理

    在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...

  7. linux下bom头导致的php调用php接口 返回的json字符串 无法转成 数组,即json字符串无法解码的问题

    今天很是郁闷,写了一个php接口,返回的是标准的json字符串,但是调用的php 就是无法json_decode(),返回错误码为4,最后终于找到原因,原来是蒙一个文件中有bom头,最后采用一个命令 ...

  8. Android开发之从网络URL上下载JSON数据

    网络下载拉取数据中,json数据是一种格式化的xml数据,非常轻量方便,效率高,体验好等优点,下面就android中如何从给定的url下载json数据给予解析: 主要使用http请求方法,并用到Htt ...

  9. ajax返回数据时,如何将javascript值(通常为对象或数组)转为json字符串

    ajax获取值时,返回的数据为空时 alert后出现 [ ]; 用if语句判断时不为空,此时如何判断返回的数据是否为空.可将返回的值转化为json字符串. JSON.stringify() 方法用于将 ...

随机推荐

  1. 洛谷P3723 [AH2017/HNOI2017]礼物

    吴迪说他化学会考上十分钟就想出来了,太神了%%%不过我也十分钟 但是调了一个多小时啊大草 懒得人话翻译了,自己康吧: 我的室友(真的是室友吗?)最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决 ...

  2. FineUIPro v6.0.1 小版本更新!

    这次修正了 v6.0.0版本的几个问题,建议所有用户升级到此版本: +修正调用F.addMainTab时可能出现JS错误的问题(34484135,1450561644).    -仅在未调用F.ini ...

  3. JWT签名与验签

    签名Token生产 using System; using System.Collections.Generic; using System.IdentityModel.Tokens.Jwt; usi ...

  4. 解决 cannot find reference 'LSHForest' in '__init__.py'

    from sklearn.neighbors import LSHForest cannot find reference 'LSHForest' in '__init__.py'报错 pip3 li ...

  5. 一个简单的 WPF 程序,用于显示实时时间

    直接贴代码了: TimeShowerWindow.xaml <Window x:Class="HelloWorld.TimeShowerWindow" xmlns=" ...

  6. Winform中设置ZedGraph的X轴与Y轴的刻度不在对面显示

    场景 C#窗体应用中使用ZedGraph曲线插件绘制图表: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/99716066 Win ...

  7. CSS覆盖问题的说明

    最近在写css的时候,由于经常使用到很长的多级选择器,而碰到一些样式被覆盖或者覆盖不了的情况是相当的郁闷,所以专门花了一些时间对一些选择器做了对比测试.这里先说明一下,由于ie6不支持css2.0选择 ...

  8. SQL 除去数字中多于的0

    /* 除掉多于的0 */ CREATE FUNCTION [dbo].[fn_ClearZero] ( ) ) ) AS BEGIN ); IF (@inValue = '') SET @return ...

  9. C 函数声明、函数参数

    参考连接:https://www.runoob.com/cprogramming/c-functions.html 局部变量与全局变量在内存中的储存方式 全局变量保存在内存中的全局储存区中,占用静态的 ...

  10. jmeter工具下载及工具功能操作介绍

     本博文jmeter介绍的是在windows下使用,linux后期看情况更新,谢谢 简单介绍,想更多了解的去官方,多的很: The Apache JMeter™ application is open ...