一、json.dumps()
对数据进行编码,将Python字典编码成json字符串,是一个系列化的过程。
import json
from pprint import pprint
def Test():
py_dict = {
"A":100,
"B":20,
"C":30
}
json_str = json.dumps(py_dict)
print(type(py_dict))
pprint(py_dict)
print("-"*50)
print(type(json_str))
pprint(json_str)
Test()
输出如下:
<class 'dict'>
{'A': 100, 'B': 20, 'C': 30}
--------------------------------------------------
<class 'str'>
'{"A": 100, "B": 20, "C": 30}'
用pprint是为了让输出结构更完整,在这里可以将转为json字符串后的两端引号打印出。
注:json.dumps()也可以对字符串进行编码,转化规则就是将原字符串所有特殊字符转义成普通字符后,再将其转为字符串。
二、json.loads()
对数据进行解码,将json字符串转换Python字典或列表,是一个反序列化的过程。
import json
from pprint import pprint
def Test():
str1='''
"abc"
'''
str2='''
["A",1,2,"L"]
'''
str3='''
{"A":1,"B":2}
'''
py1 = json.loads(str1)
print(type(py1))
pprint(py1)
py2 = json.loads(str2)
print(type(py2))
pprint(py2)
py3 = json.loads(str3)
print(type(py3))
pprint(py3)
Test()
输出:
<class 'str'>
'abc'
<class 'list'>
['A', 1, 2, 'L']
<class 'dict'>
{'A': 1, 'B': 2}
json.loads()会将字符串解析成python中存在的类型。
2.1 以下看几个错误情况:
1、传递的参数不是字符串类型。
import json
from pprint import pprint
def Test():
s = 123
py = json.loads(s)
print(type(py))
pprint(py)
Test()
报错如下:
Traceback (most recent call last):
File “/usercode/file.py”, line 12, in
Test()
File “/usercode/file.py”, line 7, in Test
py = json.loads(s)
File “/usr/local/lib/python3.8/json/init.py”, line 341, in loads
raise TypeError(f’the JSON object must be str, bytes or bytearray, ’
TypeError: the JSON object must be str, bytes or bytearray, not int
故,json.loads()接受到的参数必须是字符串类型。
2、参数为字符串类型,但是无法转换为符合规范的Python数据类型。
import json
from pprint import pprint
def Test():
s = '''123[456]'''
py = json.loads(s)
print(type(py))
pprint(py)
Test()
报错如下:
Traceback (most recent call last):
File “/usercode/file.py”, line 13, in
Test()
File “/usercode/file.py”, line 8, in Test
py = json.loads(s)
File “/usr/local/lib/python3.8/json/init.py”, line 357, in loads
return _default_decoder.decode(s)
File “/usr/local/lib/python3.8/json/decoder.py”, line 340, in decode
raise JSONDecodeError(“Extra data”, s, end)
json.decoder.JSONDecodeError: Extra data: line 1 column 4 (char 3)
故,json.loads()接受到的参数必须可以转化为符合规范的Python类型。