当前位置: 首页 > news >正文

一文讲透ast.literal_eval() eval() json.loads()

文章目录

  • 一文讲透ast.literal_eval() eval() json.loads()
    • 1. ast.literal_eval()
    • 2. eval()
    • 3. json.loads()
    • 4. 总结

一文讲透ast.literal_eval() eval() json.loads()

在Python库中,我们经常会遇到需要将字符串转换为相应对象或数据结构的情况。在这种情况下,我们可以使用ast.literal_eval()eval()json.loads()这三个函数来进行转换。然而,它们之间有一些重要的区别。

1. ast.literal_eval()

这个函数位于ast模块中,主要用于将字符串安全地转换为Python字面量表达式的值。它可以处理字符串、数字、元组、列表、字典和布尔值等常见的Python数据类型。与eval()不同,ast.literal_eval()不会执行任意的Python代码,因此更加安全。它适用于需要将字符串转换为Python数据类型的场景。
ast.literal_eval()的使用例子:

import asts = "[1, 2, 3]"
lst = ast.literal_eval(s)
print(lst)
print(type(lst))

输出:

[1, 2, 3]
<class 'list'>

在这个例子中,我们使用ast.literal_eval()将字符串s转换为列表lst。结果显示,lst是一个包含了整数元素的列表,与字符串s的内容相匹配。

2. eval()

eval()函数可以将字符串作为Python代码进行求值,并返回结果。这意味着它可以执行任意的Python代码。然而,由于它的强大性,eval()函数的使用可能存在安全风险,特别是当执行的代码来自不可信的来源时。因此,在处理用户输入或其他不可信数据时,最好避免使用eval()函数。
eval()的使用例子:

s = "print('Hello, World!')"
eval(s)

输出:

Hello, World!

在这个例子中,我们使用eval()执行字符串s中的Python代码。结果是打印出了Hello, World!

请注意,eval()函数可以执行任意的Python代码,这也就意味着它可能执行一些有害的操作,比如删除文件或访问敏感数据。因此,在处理不可信数据时,应避免使用eval()函数。

3. json.loads()

这个函数位于json模块中,专门用于将JSON字符串转换为相应的Python对象。它可以处理JSON字符串中的基本数据类型(如字符串、数字、布尔值)以及列表和字典等复杂数据结构。与eval()类似,json.loads()也是安全的,因为它只能解析JSON格式的字符串,而不会执行任意的Python代码。它适用于处理JSON数据的场景。
json.loads()的使用例子:

import jsons = '{"name": "Alice", "age": 25, "city": "New York"}'
data = json.loads(s)
print(data)
print(type(data))

输出:

{'name': 'Alice', 'age': 25, 'city': 'New York'}
<class 'dict'>

在这个例子中,我们使用json.loads()将JSON字符串s转换为Python字典data。结果显示,data是一个包含了键值对的字典,与JSON字符串s的内容相匹配。

4. 总结

请添加图片描述

  • ast.literal_eval()用于将字符串转换为Python数据类型,如列表、字典等,是安全且有限制的。
  • eval()可以执行任意的Python代码,但存在安全风险,应避免使用。
  • json.loads()用于将JSON字符串转换为Python对象,如字典、列表等,是安全的且仅限于处理JSON数据。

相关文章:

  • docker手动迁移镜像
  • mysql 锁知识汇总
  • 2024年:用OKR管理你的生活
  • 【Shell的运行原理以及Linux当中的权限问题】
  • nginx flv模块的使用和源码分析
  • 嵌入式中C 语言中的三块技术难点
  • Python 处理小样本数据的文档分类问题
  • k8s 部署 nocas 同时部署mysql
  • 备战蓝桥杯---搜索(剪枝)
  • CSS 闪电按钮效果
  • js正则综合练习1
  • springboot war包部署 和jar包部署
  • Python 轻量级定时任务调度:APScheduler
  • 系统架构设计师考试大纲2023
  • CSRF:跨站请求伪造攻击
  • .pyc 想到的一些问题
  • jquery cookie
  • socket.io+express实现聊天室的思考(三)
  • 编写符合Python风格的对象
  • 对象管理器(defineProperty)学习笔记
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 诡异!React stopPropagation失灵
  • 基于Volley网络库实现加载多种网络图片(包括GIF动态图片、圆形图片、普通图片)...
  • 开源SQL-on-Hadoop系统一览
  • 设计模式走一遍---观察者模式
  • 算法之不定期更新(一)(2018-04-12)
  • 线性表及其算法(java实现)
  • 在Mac OS X上安装 Ruby运行环境
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • # 安徽锐锋科技IDMS系统简介
  • #图像处理
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (day6) 319. 灯泡开关
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (python)数据结构---字典
  • (七)c52学习之旅-中断
  • (十一)手动添加用户和文件的特殊权限
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (四)JPA - JQPL 实现增删改查
  • (转)大道至简,职场上做人做事做管理
  • (转)视频码率,帧率和分辨率的联系与区别
  • (转)重识new
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .axf 转化 .bin文件 的方法
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .Net Memory Profiler的使用举例
  • .NET开源项目介绍及资源推荐:数据持久层
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [ C++ ] STL---string类的使用指南
  • [ABC294Ex] K-Coloring
  • [CSS]CSS 的背景
  • [GN] Vue3快速上手1