import ast与import json的区别

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”
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏过山河,踏过海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值