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) 查看该函数的参数信息:












  

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐