2
2
3
3
#标准库(8)
4
4
5
- ##json
5
+ ##JSON
6
6
7
- 就传递数据而言,xml是一种选择 ,还有另外一种,就是json, 它是一种轻量级的数据交换格式,如果读者要做web编程,是会用到它的 。根据维基百科的相关内容,对json了解一二 :
7
+ 就传递数据而言,XML是一种选择 ,还有另外一种——JSON, 它是一种轻量级的数据交换格式,如果读者要做web编程,则会用到它的 。根据维基百科的相关内容,对JSON做如下简介 :
8
8
9
9
> JSON(JavaScript Object Notation)是一種由道格拉斯·克羅克福特構想設計、輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。儘管JSON是Javascript的一個子集,但JSON是獨立於語言的文本格式,並且採用了類似於C語言家族的一些習慣。
10
10
11
- 关于json更为详细的内容 ,可以参考其官方网站:http://www.json.org
11
+ 关于JSON更为详细的内容 ,可以参考其官方网站:http://www.json.org
12
12
13
- 从官方网站上摘取部分,了解一下json的结构 :
13
+ 从上述网站摘取部分内容,了解一下JSON的结构 :
14
14
15
- > JSON建构于两种结构:
15
+ JSON建构于两种结构:
16
16
17
17
- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
18
18
- 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
19
19
20
- python标准库中有json模块 ,主要是执行序列化和反序列化功能:
20
+ python标准库中有JSON模块 ,主要是执行序列化和反序列化功能:
21
21
22
- - 序列化:encoding,把一个python对象编码转化成json字符串
23
- - 反序列化:decoding,把json格式字符串解码转换为python数据对象
22
+ - 序列化:encoding,把一个Python对象编码转化成JSON字符串
23
+ - 反序列化:decoding,把JSON格式字符串解码转换为Python数据对象
24
24
25
25
###基本操作
26
26
27
- json模块相对xml单纯了很多 :
27
+ JSON模块相对XML单纯了很多 :
28
28
29
29
>>> import json
30
30
>>> json.__all__
31
31
['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONEncoder']
32
+ #Python 3的显示结果如下:
33
+ ['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONDecodeError', 'JSONEncoder']
32
34
33
35
** encoding: dumps()**
34
36
35
37
>>> data = [{"name":"qiwsir", "lang":("python", "english"), "age":40}]
36
- >>> print data
38
+ >>> data
37
39
[{'lang': ('python', 'english'), 'age': 40, 'name': 'qiwsir'}]
38
40
>>> data_json = json.dumps(data)
39
- >>> print data_json
40
- [{"lang": ["python", "english"], "age ": 40 , "name ": "qiwsir"}]
41
+ >>> data_json
42
+ ' [{"lang": ["python", "english"], "name ": "qiwsir" , "age ": 40}]'
41
43
42
- encoding的操作是比较简单的,请注意观察data和data_json的不同 ——lang的值从元组变成了列表,还有不同:
44
+ encoding的操作是比较简单的,请注意观察 ` data ` 和 ` data_json ` 的不同 ——lang的值从元组变成了列表,还有不同:
43
45
44
46
>>> type(data_json)
45
47
<type 'str'>
46
48
>>> type(data)
47
49
<type 'list'>
48
50
49
- 将python对象转化为json类型,是按照下表所示对照关系转化的:
50
-
51
- | python==>| json|
52
- | ------| ----|
53
- | dict| object|
54
- | list, tuple| array|
55
- | str, unicode| string|
56
- | int, long, float| number|
57
- | True| true|
58
- | False| false|
59
- | None| null|
60
-
61
51
** decoding: loads()**
62
52
63
53
decoding的过程也像上面一样简单:
@@ -68,25 +58,10 @@ decoding的过程也像上面一样简单:
68
58
69
59
需要注意的是,解码之后,并没有将元组还原。
70
60
71
- 解码的数据类型对应关系:
72
-
73
- | json==>| python|
74
- | -------| ------|
75
- | object| dict|
76
- | array| list|
77
- | string| unicode|
78
- | number(int)| int, long|
79
- | number(real)| float|
80
- | true| True|
81
- | false| False|
82
- | null| None|
83
-
84
- ** 对人友好**
85
-
86
- 上面的data都不是很长,还能凑合阅读,如果很长了,阅读就有难度了。所以,json的dumps()提供了可选参数,利用它们能在输出上对人更友好(这对机器是无所谓的)。
61
+ 上面的data都不是很长,还能凑合阅读,如果很长了,阅读就有难度了。所以,JSON的` dumps() ` 提供了可选参数,利用它们能在输出上对人更友好(这对机器是无所谓的)。
87
62
88
63
>>> data_j = json.dumps(data, sort_keys=True, indent=2)
89
- >>> print data_j
64
+ >>> print data_j #Python 3: print(data_j)
90
65
[
91
66
{
92
67
"age": 40,
@@ -102,20 +77,20 @@ decoding的过程也像上面一样简单:
102
77
103
78
###大json字符串
104
79
105
- 如果数据不是很大,上面的操作足够了。但是,上面操作是将数据都读入内存,如果太大就不行了。 怎么办?json提供了 ` load() ` 和` dump() ` 函数解决这个问题,注意,跟上面已经用过的函数相比,是不同的,请仔细观察。
80
+ 如果数据不是很大,上面的操作足够了。但现在是所谓“大数据”时代了,随便一个什么业务都在说自己是大数据,显然不能总让JSON很小,事实上真正的大数据,再“大”的JSON也不行了。前面的操作方法是将数据都读入内存,如果数据太大了就会内存溢出。 怎么办?JSON提供了 ` load() ` 和` dump() ` 函数解决这个问题,注意,跟上面已经用过的函数相比,是不同的,请仔细观察。
106
81
107
82
>>> import tempfile #临时文件模块
108
83
>>> data
109
84
[{'lang': ('python', 'english'), 'age': 40, 'name': 'qiwsir'}]
110
85
>>> f = tempfile.NamedTemporaryFile(mode='w+')
111
86
>>> json.dump(data, f)
112
87
>>> f.flush()
113
- >>> print open(f.name, "r").read()
88
+ >>> print open(f.name, "r").read() #Python 3: print(open(f.name, "r").read())
114
89
[{"lang": ["python", "english"], "age": 40, "name": "qiwsir"}]
115
90
116
91
###自定义数据类型
117
92
118
- 一般情况下,用的数据类型都是python默认的 。但是,我们学习过类后,就知道,自己可以定义对象类型的。比如:
93
+ 一般情况下,用的数据类型都是Python默认的 。但是,我们学习过类后,就知道,自己可以定义对象类型的。比如:
119
94
120
95
以下代码参考:[ Json概述以及python对json的相关操作] ( http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html )
121
96
0 commit comments