import ast与import json的区别
import ast与import json的区别
- ast.literal_eval()
- 特点
- 正确示例
- 错误示例
- json.loads()
- 特点
- 正确示例
- 错误示例
- 我觉得可以设置一下兼容
- 顺便写一下,linux中的查找文件
ast.literal_eval()
特点
- 解析 Python 字面量表达式,如:
- 基本类型:int、float、str
- 数据结构:list、tuple、dict、set
- 特殊值:None、True、False
- 不能解析 JSON 专有的 null
- 不能解析非字面量的 Python 代码
正确示例
import ast
s = "{'key': 123, 'value': [1, 2, 3], 'flag': True}" # Python 字典格式的字符串
result = ast.literal_eval(s)
print(result)
# 输出: {'key': 123, 'value': [1, 2, 3], 'flag': True}
错误示例
s = '{"key": null}' # JSON 格式
result = ast.literal_eval(s)
# ❌ SyntaxError: invalid syntax,因为 `null` 不是 Python 关键字
json.loads()
特点
- 解析 JSON 格式 的字符串(JSON 是 JavaScript 语法)
- 支持 null(转换为 Python 的 None)
- 只能解析 JSON 兼容的类型:
- 基本类型:int、float、str
- 数据结构:list、dict
- 特殊值:null → None,true → True,false → False
- 不能解析 Python 专有的格式(比如 set()、tuple())
正确示例
import json
s = '{"key": 123, "value": [1, 2, 3], "flag": true, "data": null}' # JSON 格式
result = json.loads(s)
print(result)
# 输出: {'key': 123, 'value': [1, 2, 3], 'flag': True, 'data': None} ✅
错误示例
s = "{'key': 123}" # Python 字典格式
result = json.loads(s)
# ❌ json.JSONDecodeError: Expecting property name enclosed in double quotes
我觉得可以设置一下兼容
当然这是前后端在没有交接的情况下,我们不知道对方传来的格式,我们可以都试一下
也就是说我们先尝试使用ast.literal_eval进行解析,如果解析失败,就再尝试使用json.loads进行解析即可.
import ast
import json
try:
parameters = ast.literal_eval(参数parameter)
print(参数parameters)
except (SyntaxError, ValueError) as e:
print(f"解析失败: {e}")
print(f"[类型]Type of 参数parameter: {type(参数parameter)}") # [类型]Type of 参数parameter: <class 'str'>
print(f"[值]Value of 参数parameter: {repr(参数parameter)}") # [值]Value of 参数parameter: '{"pod5File": null, "Workflow": null, "filter": null}'
parameters = json.loads(参数parameter)
print(f"解析成功: {parameters}")
顺便写一下,linux中的查找文件
- 全局查找
find / -name “xxx.py” - 当前文件夹下查找
find ./ -name “xxx.py”