专栏首页SEian.G学习记录Python 如何将字符串转为字典?

Python 如何将字符串转为字典?

在自动化运维开发过程中,经常会遇到一个小需求:需要将一个字符串转为字典;

这也就联想到,很多开发人员将表中的字段存储成字符串类型存储到MySQL数据表中,那么在从字段值到之后,势必要进行转化,这样更方便使用;

注意:这里转换的前提是字符串格式符合JSON格式

比如字符串:

user_info = ‘{“name” : “john”, “gender” : “male”, “age”: 28}’

我们想把它转为下面的字典:

user_dict = {“name” : “john”, “gender” : “male”, “age”: 28}

有以下几种方法:

1、通过 json 来转换

>>> import json
>>> user_info= '{"name" : "john", "gender" : "male", "age": 28}'
>>> user_dict = json.loads(user_info)
>>> user_dict
{u'gender': u'male', u'age': 28, u'name': u'john'}

但是使用 json 进行转换存在一个潜在的问题。

由于 json 语法规定 数组或对象之中的字符串必须使用双引号,不能使用单引号

(官网上有一段描述是 “A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes” )

因此下面的转换是错误的:

>>> import json
>>> user_info = "{'name' : 'john', 'gender' : 'male', 'age': 28}"  # 由于字符串使用单引号,会导致运行出错
>>> user_dict = json.loads(user_info)
Traceback (most recent call last):
  File "", line 1, in 
  File "/usr/lib64/python2.7/json/__init__.py", line 338, in loads
    return _default_decoder.decode(s)
  File "/usr/lib64/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib64/python2.7/json/decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 2 (char 1)

2、通过 eval

>>> usr_info = '{"name" : "john", "gender" : "male", "age": 28}'
>>> user_dict = eval(user_info)
>>> user_dict
{'gender': 'male', 'age': 28, 'name': 'john'}
>>> user_info = "{'name' : 'john', 'gender' : 'male', 'age': 28}"
>>> user_dict = eval(user_info)
>>> user_dict
{'gender': 'male', 'age': 28, 'name': 'john'}

通过 eval 进行转换就不存在上面使用 json 进行转换的问题。但是,使用 eval 却存在安全性的问题,比如下面的例子:

# 让用户输入 `user_info`
>>> user_info = raw_input('input user info: ')
# 输入 {"name" : "john", "gender" : "male", "age": 28},没问题
>>> user_dict = eval(user_info)
# 输入 __import__('os').system('dir'),user_dict 会列出当前的目录文件!
# 再输入一些删除命令,则可以把整个目录清空了!
>>> user_dict = eval(user_info)

3、通过 literal_eval

>>> import ast
>>> user = '{"name" : "john", "gender" : "male", "age": 28}'
>>> user_dict = ast.literal_eval(user)
>>> user_dict
{'gender': 'male', 'age': 28, 'name': 'john'}
user_info = "{'name' : 'john', 'gender' : 'male', 'age': 28}"
>>> user_dict = ast.literal_eval(user)
>>> user_dict
{'gender': 'male', 'age': 28, 'name': 'john'}

使用 ast.literal_eval 进行转换既不存在使用 json 进行转换的问题,也不存在使用 eval 进行转换的 安全性问题,因此推荐使用 ast.literal_eval

本文分享自微信公众号 - DBA的辛酸事儿(dbabitter),作者:SEianG

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Python将字符串转为字典

    在工作中我们经常会遇到数据类型之间的互转的问题,而通常我们请求一些API借口返回的结果就是字符串,但是格式是Json的,在Python中转为字典是最易处理的,所...

    后场技术
  • 字符串转换整数python_将Python字符串转换为Int:如何在Python中将字符串转换为整数

    Unlike many other programming languages out there, Python does not implicitly ty...

    用户7886150
  • 字符串转换整数python_将Python字符串转换为Int:如何在Python中将字符串转换为整数

    Unlike many other programming languages out there, Python does not implicitly ty...

    用户7886150
  • 26 - python 字典与json 字符串如何互转

    若尘_
  • Python进阶:如何将字符串常量转为变量?

    前几天,我们Python猫交流学习群里的 M 同学提了个问题。这个问题挺有意思,经初次讨论,我们认为它无解。

    Python猫
  • php 如何将image图片转化为字符串

    前两天研究php中的 imagick 扩展的时候,突发奇想实现的一个小功能感觉挺有意思,在这里记录一下:

    码缘
  • encoding - 如何将 Dart 的ByteData转换为字符串?

    正如 Gunter 在评论中提到的,您可以使用File.writeAsBytes. 但是,它确实需要一些 API 工作才能从ByteData到List<int>...

    Weaster
  • JavaSE-将字符串转换为数字

    提示:仔细思考所有可能的输入情况。这个问题没有给出输入的限制,你需要自己考虑所有可能的情况。

    开源君
  • JavaSE-将字符串转换为数字

    提示:仔细思考所有可能的输入情况。这个问题没有给出输入的限制,你需要自己考虑所有可能的情况。

    开源君
  • Python进阶:如何将字符串常量转化为变量?

    前几天,我们Python猫交流学习群 里的 M 同学提了个问题。这个问题挺有意思,经初次讨论,我们认为它无解。

    Python猫
  • python中将 \\uxxxx转换为 Unicode字符串

    今天碰到一个很有意思的问题,需要将普通的 Unicode字符串转换为 Unicode编码的字符串,如下:

    渔父歌
  • javascript将字符串转为对象

    用户1719978
  • python中将字符串转为json对象并

    string =" {   "status": "error",   ...

    py3study
  • 【Python实践-9】将字符串转化为浮

    利用map和reduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456。

    py3study
  • python 将json类型的字符串转换成字典 使用demo

    我们从网页上抓取的很多数据都是json格式,保存下来也就是字符串格式,我们这时候如果使用字符串拼接或者正则表达式在json字符串中寻找信息是比较麻烦的。把jso...

    用户7886150
  • python split()函数使用拆分字符串 将字符串转化为列表

    程序员同行者
  • Python如何将整数转化成二进制字符串

    >>> binary = lambda n: '' if n==0 else binary(n/2) + str(n%2)

    用户7886150
  • Golang将时间戳转为字符串

    在golang里面获取时间戳并不难。只要加载time包。然后time.Now().Unix(),就可以了,但接下来转成string就麻烦了 本来,加载strco...

    李海彬
  • Golang将时间戳转为字符串

    在golang里面获取时间戳并不难。只要加载time包。然后time.Now().Unix(),就可以了,但接下来转成string就麻烦了 本来,加载strco...

    李海彬

扫码关注云+社区

领取腾讯云代金券