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)即可。
在这里插入图片描述

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值