Python中json.loads()无法解析单引号字符串问题的解决方法

方案一:替换字符串中的单引号为双引号

使用s.replace()将字符串中的单引号替换为双引号。

import json
 
# 创建字典
dict = {}
dict['id'] = 'cc695906217'
dict['name'] = '种冲'
# 打印字典
print(dict)
# 保存为json文件
with open('dict.json','w',encoding='utf-8') as f:
    f.write((str)(dict))
# 加载json文件
with open('dict.json','r',encoding='utf-8') as f:
    s = f.read()
    print(s)
    s = s.replace('\'','\"')
    js = json.loads(json.dumps(eval(s)))
    print(js['name'])

运行结果:

{'id': 'cc695906217', 'name': '种冲'}
{'id': 'cc695906217', 'name': '种冲'}
种冲

方案二、在使用json.loads()前使用eval()和json.dumps()进行处理

import json
 
# 创建字典
dict = {}
dict['id'] = 'cc695906217'
dict['name'] = '种冲'
# 打印字典
print(dict)
# 保存为json文件
with open('dict.json','w',encoding='utf-8') as f:
    f.write((str)(dict))
# 加载json文件
with open('dict.json','r',encoding='utf-8') as f:
    s = f.read()
    print(s)
    js = json.loads(json.dumps(eval(s)))
    print(js['name'])

运行结果:

{'id': 'cc695906217', 'name': '种冲'}
{'id': 'cc695906217', 'name': '种冲'}
种冲

解析:虽然json.loads()无法解析单引号字符串,但是eval()这个内置函数可以将字符串表达式转化为值(很智能),它可以解析单引号字符串。在这里,eval()将字符串{‘id’: ‘cc695906217’, ‘name’: ‘种冲’}转化为字典对象,json.dumps()可将字典对象转化为JSON格式的字符串,然后json.loads()可将JSON格式的字符串解析为字典对象。

def dumps(obj, *, skipkeys=False, ensure_ascii=True, check_circular=True,
        allow_nan=True, cls=None, indent=None, separators=None,
        default=None, sort_keys=False, **kw):
    """Serialize ``obj`` to a JSON formatted ``str``.

是不是有冗余操作了?可直接令js=eval(s)即可。
在这里插入图片描述

发布了84 篇原创文章 · 获赞 29 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/qq_39852676/article/details/103895273