json数据的中文显示问题 python
post请求数据时,响应的内容是json数据,但是返回的json数据中文显示有问题,变成 \uXXX的形式。这是因为中文以 unicode 编码了,而默认是以ASCII解析的,中文不在ASCII编码中,所以无法显示。这时候我们可以用 import json 然后调用json.loads() 和json.dumps()来使中文正确显示。
具体怎么做呢?用下面的代码即可实现(data是中文不能正常显示的json串,newjson是处理后中文正常显示的字符串)
import json
myjson=json.loads(data) #data是向 api请求的响应数据,data必须是字符串类型的
newjson=json.dumps(myjson,ensure_ascii=False) #ensure_ascii=False 就不会用 ASCII 编码,中文就可以正常显示了
print(newjson)
首先需要了解一下encoding与decoding
encoding:编码,把Python对象转换成json字符串
decoding:解码,把json字符串解码转换成Python对象
1. json.loads() :把json字符串解码转换成Python对象
从上图可以看到 json.loads()的参数说明。注意这里的“s”应该是 一个包含JSON 文档的“str”实例(也就是上面说的 data应该是字符串)
2.json.dumps(): 把Python对象转换成json字符串
从上图可以看到 json.loads()的参数说明。注意这里的"obj"应该是Python对象,参数“ensure_ascii”默认值是True(这就是为什么中文无法正常显示的原因),所以我们要把这个参数的值设为False.
下面是我的代码:(我用的是python3.4)
import json
import urllib.request
req = urllib.request.Request(url,postData,header) # 把url,postData,header换成你自已的值response=urllib .request .urlopen(req) #response是file-like的对象data=response.read() #data是bytes 类型data = ungzip(data) #ungzip是我自己写的解压函数data=data.decode() #decode后,data从bytes类型转换成str#处理data的中文myjson=json.loads(data) #data的type必须为str. newjson=json.dumps(myjson,ensure_ascii=False)
print(newjson)
附上Python中的json处理的官方文档:https://docs.python.org/3.4/library/json.html
以及有用的链接:http://www.2cto.com/kf/201306/222129.html
另外:你可以通过help(json.dumps)查看这个函数的有关参数信息
通过 help(json.loads) 查看该函数的参数信息: