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,他让我对这个函数感兴趣了
写出生活