Python将字符串转为字典
时间:2022-07-24
本文章向大家介绍Python将字符串转为字典,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在工作中我们经常会遇到数据类型之间的互转的问题,而通常我们请求一些API借口返回的结果就是字符串,但是格式是Json的,在Python中转为字典是最易处理的,所以这里记录一下在Python下把字符串转为字典的三种方法。
方法一: 通过内置函数eval
Source Code:
#!/usr/bin/env python3
#Author: nock.chenstr_info = "{'name': 'nock', 'age': 14}"
dict_info = eval(str_info)print("string info type is -->: %s" % (type(str_info)))
print("dict info type is -->: %s" % (type(dict_info)))
Result:
string info type is -->: <class 'str'>
dict info type is -->: <class 'dict'>
不过使用eval有一个安全性问题,示例如下:
Source Code:
#!/usr/bin/env python3
#Author: nock.chenstr_info = input('input str info: ')
dict_info = eval(str_info)print("dict_info is >%s< " % dict_info)
Result:
input str info: __import__('os').system('ls')
collector_data.py
test.py
Download
dict_info is >0<
如上所示当我们输入__import__('os').system('ls')
的时候会打印出脚本所存目录下的文件,如果传入一个rm -rf *
之类的命令,那则会把所有改目录下的东西删除掉;当然我们这么去用的场景会非常好少,也不可能有人会这么传值,不过这里说明一下。
方法二: 通过json
模块处理
Source Code:
#!/usr/bin/env python3
#Author: nock.chenimport jsonstr_info = '{"name": "nock", "age": 18}'
dict_info = json.loads(str_info)print("string info type is -->: %s" % (type(str_info)))
print("dict info type is -->: %s" % (type(dict_info)))
Result:
string info type is -->: <class 'str'>
dict info type is -->: <class 'dict'>
使用json
模块进行转换也存在一个问题,由于json
语法规定 数组或对象之中的字符串必须使用双引号,不能使用单引号, 官网上有一段描述是:
报错示例如下:
#!/usr/bin/env python3
#Author: nock.chenimport json
str_info = "{'name': 'nock', 'age': 18}"
dict_info = json.loads(str_info)
报错结果如下:
Traceback (most recent call last):
File "test.py", line 7, in <module>
dict_info = json.loads(str_info)
File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/__init__.py", line 319, in loads
return _default_decoder.decode(s)
File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 339, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/Cellar/python3/3.5.1/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 355, in raw_decode
obj, end = self.scan_once(s, idx)
json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
方法三: 通过ast
模块处理
Source Code:
#!/usr/bin/env python3
#Author: nock.chenimport ast
str_info = '{"name": "nock", "age": 18}'
dict_info = ast.literal_eval(str_info)print("string info type is -->: %s" % (type(str_info)))
print("dict info type is -->: %s" % (type(dict_info)))s_info = "{'name': 'nock', 'age': 18}"
d_info = ast.literal_eval(s_info)print("s info type is -->: %s" % (type(s_info)))
print("d info type is -->: %s" % (type(d_info)))
Result:
string info type is -->: <class 'str'>
dict info type is -->: <class 'dict'>
s info type is -->: <class 'str'>
d info type is -->: <class 'dict'>
使用ast.literal_eval
进行转换既不存在使用json
模块进行转换的问题,也不存在使用eval
模块进行转换的安全性问题,因此推荐大家使用ast.literal_eval
的方法。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【一天一大 lee】分割等和子集 (难度:中等) - Day20201011
- 【一天一大 lee】寻找两个正序数组的中位数 (难度:困难) - Day20201003
- 【一天一大 lee】颜色分类 (难度:中等) - Day20201007
- 【一天一大 lee】树中距离之和 (难度:困难) - Day20201006
- 在Spring项目中以多线程的方式并发执行,异步处理任务。解决统计、累加类业务的例子。
- 【十分钟教会你汇编】MIPS编程入门
- 实践中如何优化MySQL(收藏)
- Framework掌握不全被面试官怼?Android字节跳动大牛的精编解析笔记带你系统学习!
- 路由策略中的IP-Prefix你了解多少?
- 路由策略——Route-policy
- 如何合理设置线程池大小
- 前端设计模式之责任链模式
- 项目实战|基础请求封装
- 一种TreeView组件分页异步加载的方法
- V8 最佳实践:从 JavaScript 变量使用姿势说起