浅谈Python3 Json模块

基础结构

JSON建构于两种结构:

1. “名称/值”对的集合(A collection of name/value pairs)
   不同的语言中,它被理解为对象(object),记录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。

2. 值的有序列表(An ordered list of values) 
   在大部分语言中,它被理解为数组(array)。
         

基础示例

简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。这个字符串看起来有点儿古怪,但是 JavaScript 很容易解释它,而且 JSON 可以表示比”名称 / 值对”更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表。

表示名称 / 值对

按照最简单的形式,可以用下面这样的 JSON 表示 “名称 / 值对” :{ “firstName”: “Brett” }
这个示例非常基本,而且实际上比等效的纯文本 “名称 / 值对” 占用更多的空间:firstName=Brett

但是,当将多个”名称 / 值对”串在一起时,JSON 就会体现出它的价值了。首先,可以创建包含多个”名称 / 值对”的 记录,比如:

{ “firstName”: “Brett”, “lastName”:”McLaughlin”, “email”: “aaaa” }

从语法方面来看,这与”名称 / 值对”相比并没有很大的优势,但是在这种情况下 JSON 更容易使用,而且可读性更好。例如,它明确地表示以上三个值都是同一记录的一部分;花括号使这些值有了某种联系。

Python3 Json模块

JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。Python3 可以使用 json 模块来对 JSON 数据进行编解码。

json.dumps

将 Python 对象编码转化为 json 字符串

1
2
3
4
5
6
7
8
9
10
11
import json
data = {
"name" : "QzmVc1",
"Age" : "20",
"City" : "NanJing"
}
Json_data = json.dumps(data)
print("Python:", data)
print("Json:", Json_data)
print(type(data))
print(type(Json_data))

输出结果

1
2
3
4
Python: {'name': 'QzmVc1', 'Age': '20', 'City': 'NanJing'}
Json: {"name": "QzmVc1", "Age": "20", "City": "NanJing"}
<class 'dict'>
<class 'str'>

转化后的 Json_data 是一个字符串类型,可以使用 enumerate 来查看一下 Json_data 字符串的索引值和对应值。

1
2
for i,v in enumerate(Json_data):
print(i,v)

输出结果片段:

0 {
1 “
2 n
3 a
4 m
5 e
6 “

json.loads

将 json 格式转化为 Python 格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import json
data = {
"name" : "QzmVc1",
"Age" : "20",
"City" : "NanJing"
}
Json_data = json.dumps(data)
print("Python:", data)
print("Json:", Json_data)
print(type(data))
print(type(Json_data))
Python_data = json.loads(Json_data)
print("Python:",Python_data)
print(type(Python_data))

输出结果

1
2
3
4
5
6
Python: {'name': 'QzmVc1', 'Age': '20', 'City': 'NanJing'}
Json: {"name": "QzmVc1", "Age": "20", "City": "NanJing"}
<class 'dict'>
<class 'str'>
Python: {'name': 'QzmVc1', 'Age': '20', 'City': 'NanJing'}
<class 'dict'>

json.dump

dump 和 dumps 的功能一样,将 dict 转化为 str 的格式,然后存入文件中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import json
data = {
"name" : "QzmVc1",
"Age" : "20",
"City" : "NanJing"
}
Json_data = json.dumps(data)
file = open('Demo.txt','w')
print(type(file))

json.dump(data,file)
json.dump(Json_data,file)

file.close()

json.load

load 和 loads 的功能一样,从文件中读取 str 格式并将其转化为字符串。

1
2
file = open('Demo.txt', 'r')
print(json.load(file))

load 在读取的时候,只需要文件对象一个参数即可。而 dump 在使用的时候,需要 Python 对象作为第一个传入参数,文件对象作为第二个传入参数。

小结:

dump 或 dumps, 把其他对象或者格式,转化为 json 格式,dumps 用来处理字符串,dump 用来处理文件。
load 或 loads ,把 json 格式转化成其他格式,loads 用来处理字符串,load 用来处理文件。