[Python] 纯文本查看 复制代码
import json
from json import JSONDecodeError
# 列表 JSON
JSON_LIST = "[{\"name\":\"test\",\"date\":\"04-06 10:10\",\"status\":\"success\"}]"
# 对象 JSON
JSON_OBJ = "{'name': 'test', 'date': '2020-04-06 20:59:51', 'status': '学生端-签到成功'}"
def parse(s):
try:
# 加载JSON
j = json.loads(s)
except JSONDecodeError:
# JSON格式非法,把单引号换成双引号
j = json.loads(s.replace("\'", "\""))
if isinstance(j, list):
# JSON是列表
for obj in j:
print(f"status = {obj['status']}")
else:
# JSON是单个对象
print(f"status = {j['status']}")
parse(JSON_LIST)
parse(JSON_OBJ)
输出:
[PowerShell] 纯文本查看 复制代码
status = success
status = 学生端-签到成功
这两个JSON的区别:
- 第一个JSON里的对象被包在一对方括号里,意味着这是一个列表,里面可能有不止一个对象。
- 第二个JSON没有方括号,是单个对象。
- 不同于第一个JSON,第二个JSON用了单引号而不是双引号,所以它的格式其实是非法的。这就是为什么 json.loads() 会抛 JSONDecodeError 错误。
解法:
- 先加载JSON,如果单引号报错就把单引号全换成双引号。
- 判断加载返回的对象类型,如果是 list 列表就遍历,如果是单个对象就直接返回。
|