1. 什么是JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。
JSON建构于两种结构:
“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
这些都是常见的数据结构。事实上大部分现代计算机语言都以某种形式支持它们。这使得一种数据格式在同样基于这些结构的编程语言之间交换成为可能。
jso官方说明参见:http://json.org/
Python操作json的标准api库参考:http://docs.python.org/library/json.html
2. json的基本操作
对简单数据类型的encoding 和 decoding:
使用简单的json.dumps方法对简单数据类型进行编码,例如:
import json dic = {'name': 'Jim'} print(dic) print(type(dic)) data = json.dumps(dic) print(data) print(type(data))
输出:
{'name': 'Jim'}
<class 'dict'>
{"name": "Jim"}
<class 'str'>
我们可以看到, Python的字典数据类型,在经过json转换后,数据类型改变为 字符串了。
这个过程, json在内部做了处理:把单引号替换成双引号,因为json只支持双引号,然后转换成了json格式的字符串对象
下面我们在用 json的loads方法,把字符串对象还原成dict数据类型:
import json dic = {'name': 'Jim'} print(dic) print(type(dic)) data = json.dumps(dic) print(data) print(type(data)) output = json.loads(data) print(output) print(type(output))
输出:
{'name': 'Jim'}
<class 'dict'>
{"name": "Jim"}
<class 'str'>
{'name': 'Jim'}
<class 'dict'>
从输出我们可以看到, 使用json的loads方法后,它把 json格式的字符串对象又转换为python的dict数据类型了。
我们再来看看其它数据类型的转换:
import json list = ['hello', 4, 10] i = 10 json_list = json.dumps(list) print(json_list) print(type(json_list)) json_i = json.dumps(i) print(json_i) print(type(json_i))
输出:
["hello", 4, 10]
<class 'str'>
10
<class 'str'>
经过json的dumps方法后,都转换为字符串对象。
3. json的两组函数
json的 dumps 方法 和 loads方法, json的 dump方法和load方法 的区别。
代码对比如下:
import json dic = {'name': 'Jim'} f_write = open('json.txt', 'w') data = json.dumps(dic) f_write.write(data) f_write.close() f_read = open('json.txt', 'r') data = f_read.read() output = json.loads(data) print(output)
输出:
{'name': 'Jim'}
<class 'dict'>
import json dic = {'name': 'Jim'} f_write = open('json.txt', 'w') data = json.dump(dic, f_write) f_write.close() f_read = open('json.txt', 'r') output = json.load(f_read) print(output) print(type(output))
输出:
{'name': 'Jim'}
<class 'dict'>
load方法和dump方法, 分别封装了 f.read() 和 f.write() 的动作