Python中json处理-json-eval-yaml

写在前面

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

json

愉快的开始

# -*- 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'])

稍有波折

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

# -*- 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
'''

数字也不行

# -*- 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

# -*- 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的功能

# -*- 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

有空去试试单引号的例子?😃

好像一切都归于平静了

# -*- 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])

但是呢,空格也是灾难

# -*- 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,他让我对这个函数感兴趣了

posted @ 2020-08-20 21:49  duohappy  阅读(405)  评论(0编辑  收藏  举报