Skip to content

Commit 52a035b

Browse files
committed
p3
1 parent 1ad16e3 commit 52a035b

File tree

1 file changed

+20
-45
lines changed

1 file changed

+20
-45
lines changed

227.md

Lines changed: 20 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,62 +2,52 @@
22
33
#标准库(8)
44

5-
##json
5+
##JSON
66

7-
就传递数据而言,xml是一种选择,还有另外一种,就是json,它是一种轻量级的数据交换格式,如果读者要做web编程,是会用到它的。根据维基百科的相关内容,对json了解一二
7+
就传递数据而言,XML是一种选择,还有另外一种——JSON,它是一种轻量级的数据交换格式,如果读者要做web编程,则会用到它的。根据维基百科的相关内容,对JSON做如下简介
88

99
>JSON(JavaScript Object Notation)是一種由道格拉斯·克羅克福特構想設計、輕量級的資料交換語言,以文字為基礎,且易於讓人閱讀。儘管JSON是Javascript的一個子集,但JSON是獨立於語言的文本格式,並且採用了類似於C語言家族的一些習慣。
1010
11-
关于json更为详细的内容,可以参考其官方网站:http://www.json.org
11+
关于JSON更为详细的内容,可以参考其官方网站:http://www.json.org
1212

13-
从官方网站上摘取部分,了解一下json的结构
13+
从上述网站摘取部分内容,了解一下JSON的结构
1414

15-
>JSON建构于两种结构:
15+
JSON建构于两种结构:
1616

1717
- “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
1818
- 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
1919

20-
python标准库中有json模块,主要是执行序列化和反序列化功能:
20+
python标准库中有JSON模块,主要是执行序列化和反序列化功能:
2121

22-
- 序列化:encoding,把一个python对象编码转化成json字符串
23-
- 反序列化:decoding,把json格式字符串解码转换为python数据对象
22+
- 序列化:encoding,把一个Python对象编码转化成JSON字符串
23+
- 反序列化:decoding,把JSON格式字符串解码转换为Python数据对象
2424

2525
###基本操作
2626

27-
json模块相对xml单纯了很多
27+
JSON模块相对XML单纯了很多
2828

2929
>>> import json
3030
>>> json.__all__
3131
['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONEncoder']
32+
#Python 3的显示结果如下:
33+
['dump', 'dumps', 'load', 'loads', 'JSONDecoder', 'JSONDecodeError', 'JSONEncoder']
3234

3335
**encoding: dumps()**
3436

3537
>>> data = [{"name":"qiwsir", "lang":("python", "english"), "age":40}]
36-
>>> print data
38+
>>> data
3739
[{'lang': ('python', 'english'), 'age': 40, 'name': 'qiwsir'}]
3840
>>> 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}]'
4143

42-
encoding的操作是比较简单的,请注意观察data和data_json的不同——lang的值从元组变成了列表,还有不同:
44+
encoding的操作是比较简单的,请注意观察`data``data_json`的不同——lang的值从元组变成了列表,还有不同:
4345

4446
>>> type(data_json)
4547
<type 'str'>
4648
>>> type(data)
4749
<type 'list'>
4850

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-
6151
**decoding: loads()**
6252

6353
decoding的过程也像上面一样简单:
@@ -68,25 +58,10 @@ decoding的过程也像上面一样简单:
6858

6959
需要注意的是,解码之后,并没有将元组还原。
7060

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()`提供了可选参数,利用它们能在输出上对人更友好(这对机器是无所谓的)。
8762

8863
>>> data_j = json.dumps(data, sort_keys=True, indent=2)
89-
>>> print data_j
64+
>>> print data_j #Python 3: print(data_j)
9065
[
9166
{
9267
"age": 40,
@@ -102,20 +77,20 @@ decoding的过程也像上面一样简单:
10277

10378
###大json字符串
10479

105-
如果数据不是很大,上面的操作足够了。但是,上面操作是将数据都读入内存,如果太大就不行了。怎么办?json提供了`load()``dump()`函数解决这个问题,注意,跟上面已经用过的函数相比,是不同的,请仔细观察。
80+
如果数据不是很大,上面的操作足够了。但现在是所谓“大数据”时代了,随便一个什么业务都在说自己是大数据,显然不能总让JSON很小,事实上真正的大数据,再“大”的JSON也不行了。前面的操作方法是将数据都读入内存,如果数据太大了就会内存溢出。怎么办?JSON提供了`load()``dump()`函数解决这个问题,注意,跟上面已经用过的函数相比,是不同的,请仔细观察。
10681

10782
>>> import tempfile #临时文件模块
10883
>>> data
10984
[{'lang': ('python', 'english'), 'age': 40, 'name': 'qiwsir'}]
11085
>>> f = tempfile.NamedTemporaryFile(mode='w+')
11186
>>> json.dump(data, f)
11287
>>> f.flush()
113-
>>> print open(f.name, "r").read()
88+
>>> print open(f.name, "r").read() #Python 3: print(open(f.name, "r").read())
11489
[{"lang": ["python", "english"], "age": 40, "name": "qiwsir"}]
11590

11691
###自定义数据类型
11792

118-
一般情况下,用的数据类型都是python默认的。但是,我们学习过类后,就知道,自己可以定义对象类型的。比如:
93+
一般情况下,用的数据类型都是Python默认的。但是,我们学习过类后,就知道,自己可以定义对象类型的。比如:
11994

12095
以下代码参考:[Json概述以及python对json的相关操作](http://www.cnblogs.com/coser/archive/2011/12/14/2287739.html)
12196

0 commit comments

Comments
 (0)