标签:bar asc 复制 深入 处理中文 oat 问题 封装 decode Json简介:Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式。Json最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式。现在也常用于http请求中,所以对json的各种学习,是自然而然的事情。Python的官网网址:https://docs.python.org/2/library/json.html?highlight=json#module-json Json API 使用:python在版本2.6之前,是需要先下载包,安装后才能使用的,有点类似现在的RF内使用SeleniumLibrary一样。但是在2.6中,官方文档(https://docs.python.org/2.6/whatsnew/2.6.html)明显指出,“有一些重要的新的软件包添加到了标准库,比如multiprocessing 和json,但是跟python 3比,2.6的这些包不会引进更多的新功能。"于是安装python2.6以上版本的童鞋,可以不需要下载json包,直接在所需的地方就import json 即可使用,在安装目录下的Lib 下,看到这两个包(点进去仔细阅读这些源码,会有更多的收获,)如下文所示:
Python2.6 以上版本支持Json的编码和解码,支持python的大部分内置类型与Json进行转换。最简单的例子如下所示:
>>> import json >>> data = {"spam" : "foo", "parrot" : 42} >>> in_json = json.dumps(data) # Encode the data >>> in_json ‘{"parrot": 42, "spam": "foo"}‘ >>> json.loads(in_json) # Decode into a Python object {"spam" : "foo", "parrot" : 42}
Encode过程,是把python对象转换成json对象的一个过程,常用的两个函数是dumps和dump函数。两个函数的唯一区别就是dump把python对象转换成json对象生成一个fp的文件流,而dumps则是生成了一个字符串:
其他参数的使用都是一样的。以下是部分学习的代码片段:
dic1 = {‘type‘:‘dic1‘,‘username‘:‘loleina‘,‘age‘:16} json_dic1 = json.dumps(dic1) print json_dic1 json_dic2 = json.dumps(dic1,sort_keys=True,indent =4,separators=(‘,‘, ‘: ‘),encoding="gbk",ensure_ascii=True ) print json_dic2
运行结果如下所示:
如果把实例中的key‘username‘的value换成中文的“测试”,则用第一次不加参数转换则会报错,但是用第二个加参数的就能正常运行。
实际上就是对函数的参数的一个理解过程,下面列出几个常用的参数:
Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(,,,,,,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key
ensure_ascii:默认值True,如果dict内含有non-ASCII的字符,则会类似\uXXXX的显示数据,设置成False后,就能正常显示
indent:应该是一个非负的整型,如果是0,或者为空,则一行显示数据,否则会换行且按照indent的数量显示前面的空白,这样打印出来的json数据也叫pretty-printed json
separators:分隔符,实际上是(item_separator, dict_separator)的一个元组,默认的就是(‘,‘,‘:‘);这表示dictionary内keys之间用“,”隔开,而KEY和value之间用“:”隔开。
encoding:默认是UTF-8,设置json数据的编码方式。
sort_keys:将数据根据keys的值进行排序。
Decode过程,是把json对象转换成python对象的一个过程,常用的两个函数是loads和load函数。区别跟dump和dumps是一样的。
if __name__ == ‘__main__‘: # 将python对象test转换json对象 test = [{"username":"测试","age":16},(2,3),1] print type(test) python_to_json = json.dumps(test,ensure_ascii=False) print python_to_json print type(python_to_json) # 将json对象转换成python对象 json_to_python = json.loads(python_to_json) print json_to_python print type(json_to_python)
运行结果如下: