Json简介:Json,全名 JavaScript Object Notation,是一种轻量级的数据交换格式。最广泛的应用是作为AJAX中web服务器和客户端的通讯的数据格式。
Python2.6及以上的版本可以直接import json
进行使用,不需要下载json包了。
json模块支持python的大部分内置类型与Json进行转换。
json模块提供了四个方法
dumps #encode,将python对象转换为json对象
loads #decode,将json对象转换为python对象
dump #encode,将python对象转换为可以存储到文件的fp文件流
load #decode,将fp文件流转换为python对象
Encode过程,是把python对象转换成json对象的一个过程,常用的两个函数是dumps和dump函数。两个函数的唯一区别就是dump把python对象转换成json对象生成一个fp的文件流,而dumps则是生成了一个所有程序语言都认识的字符串。
Decode过程,是把json对象转换成python对象的一个过程,常用的两个函数是loads和load函数。区别跟dump和dumps是一样的。
来看看他们的参数
json.dump(obj, fp, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, encoding, default, **kw)
json.dumps(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, encoding, default, **kw)
json.load(fp, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
json.loads(s, encoding, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw)
dumps接受一个python对象作为必须参数(其他参数可选),而这个对象可以是任何python的数据类型。
data = ['username','age','others']
print type(data)
test = json.dumps(data)
print type(test)
print test
print ''
data1 = (1,2,3)
print type(data1)
test1 = json.dumps(data1)
print type(test1)
print test1
print ''
data2 = {"user":"whaike","age":24}
print type(data2)
test2 = json.dumps(data2)
print type(test2)
print test2
print ''
data3 = "what fuck ..."
print type(data3)
test3 = json.dumps(data3)
print type(test3)
print test3
print ''
data4 = None
print type(data4)
test4 = json.dumps(data4)
print type(test4)
print test4
#结果
#<type 'list'>
#<type 'str'>
#["username", "age", "others"]
#
#<type 'tuple'>
#<type 'str'>
#[1, 2, 3]
#
#<type 'dict'>
#<type 'str'>
#{"age": 24, "user": "whaike"}
#
#<type 'str'>
#<type 'str'>
#"what fuck ..."
#
#<type 'NoneType'>
#<type 'str'>
#null
其他就不列举了,详细如下(python -> json)
而loads与其相反,将json编码的字符串再转换为python的数据结构。详细如下(json ->python)
其他常用参数说明:
Skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,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的值进行排序。
部分学习代码片段
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
#结果
#{"username": "loleina", "age": 16, "type": "dic1"}
#{
# "age": 16,
# "type": "dic1",
# "username": "loleina"
#}
如果把实例中的key'username'的value换成中文的“测试”,
dic1 = {'type':'dic1','username':'测试','age':16}
json_dic1 = json.dumps(dic1)
print json_dic1
json_dic2 = json.dumps(dic1,sort_keys=True,indent =4,separators=(',', ': '),encoding="utf8",ensure_ascii=False )
print json_dic2
#结果
#{"username": "\u6d4b\u8bd5", "age": 16, "type": "dic1"}
#{
# "age": 16,
# "type": "dic1",
# "username": "测试"
#}
# dump功能
# 将数据通过特殊的形式转换为所有程序语言都认识的字符串,并写入文件
with open('D:/tmp.json', 'w') as f:
json.dump(data, f)
# load功能
# 从数据文件中读取数据,并将json编码的字符串转换为python的数据结构
with open('D:/tmp.json', 'r') as f:
data = json.load(f)
参考如下,侵删
python对json的操作总结
python---Json
官网json— JSON encoder and decode