方法一: 通过内置函数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
10
,
in
<module>
d_info
=
json.loads(s_info)
File
"F:\python\python35\lib\json\__init__.py"
, line
319
,
in
loads
return
_default_decoder.decode(s)
File
"F:\python\python35\lib\json\decoder.py"
, line
339
,
in
decode
obj, end
=
self
.raw_decode(s, idx
=
_w(s,
0
).end())
File
"F:\python\python35\lib\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
)
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