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

一文讲透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 ast

s = "[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 json

s = '{"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数据。

http://www.kler.cn/a/229376.html

相关文章:

  • UML系列之Rational Rose笔记九:组件图
  • 《异步编程之美》— 全栈修仙《Java 8 CompletableFuture 对比 ES6 Promise 以及Spring @Async》
  • 【gin】http方法了解,以及RESTful API与版本控制
  • 如何将原来使用cmakelist编译的qt工程转换为可使用Visual Studio编译的项目
  • JavaScript动态渲染页面爬取之Splash
  • 标准Android开发jdk和gradle和gradle AGP和AndroidStudio对应版本
  • Linux第42步_移植ST公司uboot的第3步_uboot命令测试,搭建nfs服务器和tftp服务器
  • python使用fabric库
  • 复习单向,双向链表,并且实现两种链表的增加和删除功能。
  • 阿木实验室SpireCV安装脚本
  • 解决Linux Shell脚本错误:“/bin/bash^M: bad interpreter: No such file or directory”
  • java执行可执行文件
  • kafka-splunk数据通路实践
  • Java注解与策略模式的奇妙结合:Autowired探秘
  • 算法学习——LeetCode力扣哈希表篇1
  • 在WebGL中创建动画
  • 深入解析Elasticsearch的内部数据结构和机制:行存储、列存储与倒排索引之行存(一)
  • Dijkstra求最短路 I
  • Linux较常用的几个命令记录
  • sui move笔记
  • 总是提示安装不了tensorflow
  • 网络编程面试系列-02
  • 【方法论】费曼学习方法
  • IT行业证书的获取与价值:提升职业竞争力的关键
  • Django部署到服务器后无法获取到静态元素 The requested resource was not found on this server
  • C语言贪吃蛇详解