专栏首页Kirin博客json无法解析单引号解决方案

json无法解析单引号解决方案

1、json文件的保存与加载 一般来说,我创建字典、保存为json文件、加载json文件的常用做法如下面代码所示。

import json

# 创建字典 dict = {} dict[‘id’] = ‘cc695906217’ dict[‘name’] = ‘种冲’ # 打印字典 print(dict) # 保存为json文件 with open(‘dict.json’,’w’,encoding=’utf-8′) as f: json.dump(dict,f,ensure_ascii=False) # 加载json文件 with open(‘dict.json’,’r’,encoding=’utf-8′) as f: js = json.load(f) print(js[‘name’]) 程序运行的结果如下所示。

C:\Workplace\PyPlace\WorkProjs\chong_csdn_blog\venv\Scripts\python.exe C:/Workplace/PyPlace/WorkProjs/chong_csdn_blog/json_loads_problem/json_loads_problem.py {‘id’: ‘cc695906217’, ‘name’: ‘种冲’} 种冲

Process finished with exit code 0 生成的json文件如下所示。

生成的json文件 dict.json 2、json.loads()无法解析单引号字符串问题 可是如果你是以文件的write()方法将字典按照字符串保存时,可能会出现下面的问题。

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: js = json.load(f) print(js[‘name’]) 程序运行结果是:

C:\Workplace\PyPlace\WorkProjs\chong_csdn_blog\venv\Scripts\python.exe C:/Workplace/PyPlace/WorkProjs/chong_csdn_blog/json_loads_problem/json_loads_problem.py Traceback (most recent call last): {‘id’: ‘cc695906217’, ‘name’: ‘种冲’} File “C:/Workplace/PyPlace/WorkProjs/chong_csdn_blog/json_loads_problem/json_loads_problem.py”, line 14, in <module> js = json.load(f) File “C:\Users\chongchong\AppData\Local\Programs\Python\Python37\lib\json\__init__.py”, line 296, in load parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw) File “C:\Users\chongchong\AppData\Local\Programs\Python\Python37\lib\json\__init__.py”, line 348, in loads return _default_decoder.decode(s) File “C:\Users\chongchong\AppData\Local\Programs\Python\Python37\lib\json\decoder.py”, line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File “C:\Users\chongchong\AppData\Local\Programs\Python\Python37\lib\json\decoder.py”, line 353, in raw_decode obj, end = self.scan_once(s, idx) json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

Process finished with exit code 1 原因在于保存的json文件中的字符串由原来的双引号变成了单引号,而json.loads()无法解析单引号类型的字符串。

生成了单引号的dict.json文件 3、解决方案 方案一:替换字符串中的单引号为双引号 使用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)即可。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Error in v-on handler: “ReferenceError: assignment to undeclared variable i”

    kirin
  • Java字符串去掉空格的几种方法

    其中,\s可以匹配空格、制表符、换页符等空白字符 参考:Java正则表达式https://www.runoob.com/java/java-regular-ex...

    kirin
  • 异步和同步的区别

    ”同步“就好比:你去外地上学(人生地不熟),突然生活费不够了;此时你决定打电话回家,通知家里转生活费过来,可是当你拨出电话时,对方一直处于待接听状态(即:打不通...

    kirin
  • Python-数据解析-json模块

    其中 loads() 和 load() 方法用于 python 对象的反序列化,dumps() 和 dump() 方法用于 python 对象的序列化。

    小团子
  • SpringMVC详解(六)------与json交互

      Json(JavaScript Object Notation),它是一种轻量级数据交换格式,格式简单,易于读写,目前使用特别广泛。那么这篇博客我们主要谈谈...

    IT可乐
  • python解析与组装json

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3...

    py3study
  • Python中Json文件的读入和写入以及simplejson

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScrip...

    张凝可
  • Greenplum数据库使用总结(干货满满)--对JSON的支持

    JSON作为结构化的数据,目前越来越受到开发者的爱戴,它简单灵活易于理解。是作为储存数据的一种比较使用的一种格式,greenplum从5.0开始便很好的支持了J...

    小徐
  • PHP JSON XML 相关函数

    json json_encode() 将 数组 编码为 json json_encode($value [, $options, $depth]); json...

    康怀帅
  • json格式介绍

    json是 JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是类似于java...

    Devops海洋的渔夫

扫码关注云+社区

领取腾讯云代金券