Python字符串转为字典方法大全

方法一: 通过内置函数eval

1

2

3

4

5

6

7

8

9

10

11

12

13

str_info = '{"name": "test", "age": 18}'

dict_info = eval(str_info)

 

print("string info type is -->: %s" % (type(str_info)))

print("dict info type is -->: %s" % (type(dict_info)))

print(dict_info)

 

s_info = "{'name': 'nock', 'age': 18}"

d_info = eval(s_info)

 

print("string info type is -->: %s" % (type(s_info)))

print("dict info type is -->: %s" % (type(d_info)))

print(d_info)

  

1

2

3

4

5

6

7

8

9

F:\python\python35\python.exe E:/code/clself/Test/test_example1.py

string info type is -->: <class 'str'>

dict info type is -->: <class 'dict'>

{'name''test''age'18}

string info type is -->: <class 'str'>

dict info type is -->: <class 'dict'>

{'name''nock''age'18}

 

Process finished with exit code 0

  

不过使用eval有一个安全性问题

方法二: 通过json模块处理

1

2

3

4

5

6

7

8

9

10

11

12

13

14

import json

str_info = '{"name": "test", "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)))

print(dict_info)

 

s_info = "{'name': 'nock', 'age': 18}"

d_info = json.loads(s_info)

 

print("s info type is -->: %s" % (type(s_info)))

print("d info type is -->: %s" % (type(d_info)))

print(d_info)

结果如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

F:\python\python35\python.exe E:/code/clself/Test/test_example1.py

string info type is -->: <class 'str'>

dict info type is -->: <class 'dict'>

{'name''test''age'18}

Traceback (most recent call last):

  File "E:/code/clself/Test/test_example1.py", line 10in <module>

    d_info = json.loads(s_info)

  File "F:\python\python35\lib\json\__init__.py", line 319in loads

    return _default_decoder.decode(s)

  File "F:\python\python35\lib\json\decoder.py", line 339in decode

    obj, end = self.raw_decode(s, idx=_w(s, 0).end())

  File "F:\python\python35\lib\json\decoder.py", line 355in 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)

 

Process finished with exit code 1

  

使用json模块进行转换存在一个问题,由于json语法规定 数组或对象之中的字符串必须使用双引号,不能使用单引号

方法三: 通过ast模块处理【推荐使用】

 

import ast
str_info = '{"name": "test", "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)))
print(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)))
print(d_info)

 

1

2

3

4

5

6

7

F:\python\python35\python.exe E:/code/clself/Test/test_example1.py

string info type is -->: <class 'str'>

dict info type is -->: <class 'dict'>

{'name''test''age'18}

s info type is -->: <class 'str'>

d info type is -->: <class 'dict'>

{'name''test''age'18}

使用ast.literal_eval进行转换既不存在使用json 模块进行转换的问题,也不存在使用eval模块进行转换的安全性问题,因此推荐大家使用ast.literal_eval的方法。

 

https://www.cnblogs.com/dieyaxianju/p/8986430.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值