用Python来编码和解码JSON对象

使用 JSON 函数需要导入 json 库:import json。

json.dumps 将 Python 对象编码成 JSON 字符串
json.loads 将已编码的 JSON 字符串解码为 Python 对象

json.dumps

大部分json.dumps参数的用法

sort_keys

将键进行排序
sort_keys=True 排序
sort_keys=False 默认

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import json
d={'b':1,'c':2,'a':3}
s1=json.dumps(d)
print(s1)
s2=json.dumps(d,sort_keys=True,indent=4) ##改成sort_keys=False,见output2
print(s2)
##output1:
##{"b": 1, "c": 2, "a": 3}
##{
## "a": 3,
## "b": 1,
## "c": 2
##}

##output2:
##{"b": 1, "c": 2, "a": 3}
##{
## "b": 1,
## "c": 2,
## "a": 3
##}

indent

indent参数是缩进的意思

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import json
d={'b':1,'c':2,'a':3}
s1=json.dumps(d)
print(s1)
s2=json.dumps(d,sort_keys=False,indent=4) ##改成indent=8,见output2
print(s2)
##output1:
##{"b": 1, "c": 2, "a": 3}
##{
## "b": 1,
## "c": 2,
## "a": 3
##}

##output2:
##{"b": 1, "c": 2, "a": 3}
##{
## "b": 1,
## "c": 2,
## "a": 3
##}

separator

该参数传递是一个元组,包含分割对象的字符串。起到压缩代码的作用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import json
d={'b':1,'c':2,'a':3}
s1=json.dumps(d)
print(s1)
s2=json.dumps(d,sort_keys=False,indent=4)
print(s2)
s3=json.dumps(d,separators=(',',':'))
print(s3)
##output:
{"b": 1, "c": 2, "a": 3}
{
"b": 1,
"c": 2,
"a": 3
}
{"b":1,"c":2,"a":3}

skipkeys

默认为False
当字典的keys不是基本类型(str, int, float, bool, None)会报TypeError错误
如果skipleys为True,则会跳过该数据

1
2
3
4
5
6
7
8
9
import json
d={(7,8):1,'c':2,'a':3}
s1=json.dumps(d)
print(s1)
s2=json.dumps(d,sort_keys=False,indent=4)
print(s2)

##output:
##TypeError: keys must be str, int, float, bool or None, not tuple

添加skipkeys=True后

1
2
3
4
5
6
7
8
9
10
11
12
import json
d={(7,8):1,'c':2,'a':3}
s1=json.dumps(d,skipkeys=True)
print(s1)
s2=json.dumps(d,sort_keys=False,indent=4,skipkeys=True)
print(s2)
##output:
##{"c": 2, "a": 3}
##{
## "c": 2,
## "a": 3
##}

ensure_ascii

默认为True
会对所有传入的非ASCII字符转义,如果ensure_ascii为False,则这些字符将按照原样输出

1
2
3
4
5
6
7
8
9
import json
d={"中国":"北京","美国":"华盛顿"}
s1=json.dumps(d)
print(s1)
s2=json.dumps(d,ensure_ascii=False)
print(s2)
##output:
##{"\u4e2d\u56fd": "\u5317\u4eac", "\u7f8e\u56fd": "\u534e\u76db\u987f"}
##{"中国": "北京", "美国": "华盛顿"}

json.loads

1
2
3
4
5
6
7
8
9
import json
d={'b':1,'c':2,'a':3}
s1=json.dumps(d)
print(s1,type(s1))
s2=json.loads(s1)
print(s2,type(s2))
##output:
##{"b": 1, "c": 2, "a": 3} <class 'str'>
##{'b': 1, 'c': 2, 'a': 3} <class 'dict'>