介绍几个在实际json解析过程中出现的问题,例子使用上篇Python实现递归解析json
1、eval:将字符串转换成字典
json_demo = eval(line[2])
1)对于这样的情况会报错,如下:
NameError: name 'false' is not defined
这是由于eval不支持null,true,false等,没办法转换为正确的None,True,False。
解决的办法是:定义一个全局的变量,如false=False,再去调用eval就可以正常使用了。
false = False
2、打印中文字典:
使用上述将字符串转换成字典的方式,会引起字符编码的问题,如果字典中有中文,会这样:
't3': 'target_\xe9\xa6\x96\xe9\xa1\xb5-\xe6\xb5\xb7\xe6\x8a\xa5\xe8\xa7\x86\xe9\xa2\x91\xe7\x82\xb9\xe5\x87\xbb'
解决方法是:首先在文件开头定义使用utf-8编码。
# -*- coding: utf8 -*-
两种方式:
1)使用循环:即逐层嵌套解析;
2)使用json:
demo_line = json.dumps(json_demo,encoding="UTF-8",ensure_ascii=False)
打印结果如下:
"t3": "target_首页-海报视频点击"
3、格式化输出json.
使用如下方法,就可以将json格式化为非常清晰的样子:
demo_line = json.dumps(json_demo,encoding="UTF-8",ensure_ascii=False,indent=1)
本文介绍了在实际JSON解析过程中遇到的问题及解决方案,包括使用eval解析时的限制、如何处理中文字典的编码问题,以及如何格式化输出JSON。

1917

被折叠的 条评论
为什么被折叠?



