Python_json_eval_yaml

文章未经允许,不可转载

写在前面

python自带了一个json库,解析json看起来是一件很容易的事情
但是实际遇到的情况往往超出了json库的处理范围,听到了这句话是不是感觉有点兴奋了?
本文包含了json字符串转python对象的常见姿势,希望大家各种讨论,随时和我联系
准备,开始!

json

愉快的开始

1
2
3
4
5
6
7
8
9
10
11
# -*- coding: utf-8 -*-
__author__ = 'duohappy'

import json

str_by_json = '''{"nickname":"duohappy", "truename":"zhouwenwen"}''' # json字符串

json_format = json.loads(str_by_json) # 转化为python中的字典

print(json_format)
print(json_format['nickname'])

稍有波折

双引号,单引号,傻傻分不清

1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding: utf-8 -*-
__author__ = 'duohappy'

import json

str_by_json = '''{'nickname':"duohappy", 'truename':"zhouwenwen"}''' # 非标准json字符串

json_format = json.loads(str_by_json) # 转化为python中的字典

'''
>_<
JSONDecodeError: Expecting property name enclosed in double quotes
'''

数字也不行

1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding: utf-8 -*-
__author__ = 'duohappy'

import json

str_by_json = '''{1.01:37.78, 0.99:0.025}''' # 非标准json字符串,1.01^365 = 37.78,一天进步一点点,:)

json_format = json.loads(str_by_json) # 转化为python中的字典

'''
>_<
JSONDecodeError: Expecting property name enclosed in double quotes
'''

python处理的字符串仅仅限于标准json字符串,这个是不是有点不爽?

eval

看完了下面的例子,试试单引号的例子,看看eval的威力?>_>

直接使用eval

1
2
3
4
5
6
7
8
# -*- coding: utf-8 -*-
__author__ = 'duohappy'

str_by_eval = '''{1.01:37.78, 0.99:0.025}'''

json_format = eval(str_by_eval) # 转化为python字典

print(json_format[1.01])

想更安全使用eval的功能

1
2
3
4
5
6
7
8
9
10
11
# -*- coding: utf-8 -*-
__author__ = 'duohappy'

import ast

str_by_eval = '''{1.01:37.78, 0.99:0.025}'''

json_format = ast.literal_eval(str_by_eval) # 换一个安全的试试

print(json_format)
print(json_format[0.99])

yaml

有空去试试单引号的例子?:)

好像一切都归于平静了

1
2
3
4
5
6
7
8
9
10
11
12
# -*- coding: utf-8 -*-
__author__ = 'duohappy'

# 需要安装第三方库 PyYAML
import yaml

str_by_yaml = '''{1.01: 37.78, 0.99: 0.025}'''

json_format = yaml.load(str_by_yaml)

print(json_format)
print(json_format[0.99])

但是呢,空格也是灾难

1
2
3
4
5
6
7
8
9
10
11
# -*- coding: utf-8 -*-
__author__ = 'duohappy'

import yaml

str_by_yaml = '''{1.01:37.78, 0.99:0.025}''' # 只是少了一个空格而已

json_format = yaml.load(str_by_yaml)

print(json_format)
print(json_format[0.99])

写在后面

至此,你已经掌握了3种武器了,应对复杂的实际情况,可以更加从容,:),你觉得哪个武器更好呢?


关于eval,首先感谢一下bobo,他让我对这个函数感兴趣了

您的支持将鼓励我继续创作!