首页 > 编程语言 >python 字典key单引号变双引号

python 字典key单引号变双引号

时间:2023-07-02 11:44:36浏览次数:61  
标签:rstr python 单引号 escaped json key str1 字典

背景:
  str1 = "{'a':1,'b':2,'c':3}"
把字典格式的字符串str1转成字典

import json
s_dic = json.loads(str1)
报错信息:json.decoder.JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

 

解决思路:

方法一:(不建议使用此方法)

str1 = "{'a':1,'b':2,'c':3}"
s_dic = eval(str1)

方法二:

#json格式校验(key 单引号变双引号,尽量不要用eval做转换)
def correctSingleQuoteJSON(s):
    rstr = ""
    escaped = False
    for c in s:
        if c == "'" and not escaped:
            c = '"'  # replace single with double quote
        elif c == "'" and escaped:
            rstr = rstr[:-1]  # remove escape character before single quotes
        elif c == '"':
            c = '\\' + c  # escape existing double quotes
        escaped = (c == "\\")  # check for an escape character
        rstr += c  # append the correct json

    return rstr

str2 = correctSingleQuoteJSON(str1)

s_dic = json.loads(str2)

标签:rstr,python,单引号,escaped,json,key,str1,字典
From: https://www.cnblogs.com/rubickcn/p/17520529.html

相关文章

  • Python 找出一个字符串出现3次的元素
    方式一:利用字典中key唯一来判断存在时,计数统计给value,不存在时,赋值value为1A='aabbcccdddd'B={}foriinA:ifiinB:#直接判断key在不在字典中B[i]+=1else:B[i]=1print(B)print(B) 方式二:用count去统计......
  • Python 使用 NetworkX
    Python使用NetworkX说明:本篇文章主要讲述python使用networkx绘制有向图;1.介绍&安装NetworkX是一个用于创建、操作和研究复杂网络的Python库。它提供了丰富的功能,可以帮助你创建、分析和可视化各种类型的网络,例如社交网络、Web图、生物网络等。NetworkX可以用来创建......
  • python: objct property
     """clerker.py类edit:geovindu,GeovinDudate:20230672IDE:PyCharm2023.1.2clerker.__dict__窥探私有属性私用属性clerker._Clerker.__age=-1clerker.__age=-1"""importsysimportosclassClerker(object):"""......
  • LeetCode-Python-#27 移除元素
    题目描述给定一个数列nums和数值val,消除数列nums中与数值 val相同的元素,最终返回新数列的长度;要求:不能开辟空间分配新的数列,必须改变原输入nums数列;并对修改后的nums数列的元素顺序没有要求,可以被修改。Examplesnums=[3,2,2,3; val=3 则返回长度为2;nums=[0,1,2,2,3,0,4,2]......
  • ImportError:无法从“django.utils.encoding”导入名称“force text”[Python错误已解
    在软件开发过程中遇到错误是很常见的,在使用Python和Django时,这样的错误之一就是ImportError:cannotimportname'forcetext'from'django.utils.encoding'.forcetext此特定错误表明从模块导入方法时出现问题django.utils.encoding。缺少的方法用于将输入数据转换为一致......
  • python: 举例说明什么是装饰器
    python:举例说明什么是装饰器━━━━━━━━━━━━━━━━━━━━━━━━━装饰器是Python中的一种高级特性,它允许我们在不修改原函数代码的情况下,对函数进行功能的扩展和修改。装饰器实际上是一个函数,它可以接受一个函数作为输入,并返回一个新的函数。下面是一个简单的......
  • Python基础语法--课程笔记
    Smiling&Weeping----很难再爱上下一个春天只守着我的枯木 一等再等保留标识符:1.__*__代表系统定义函数的名字:__new__()  #创建新对象的函数__init__() #创建函数2.“_”在交互式执行中使用,代表计算结果,如......
  • Python 逻辑表达式的妙用
    今天偶然看到有这样一段代码,感到很惊讶:super().__init__(package_nameor(robot_name+"_moveit_config"))语义非常明确且简洁,但是逻辑表达式可以这样用吗?我搜索了一下,原来or和and表达式的返回值并不一定是bool值。>>>1and22>>>1and00>>>0and10>>>No......
  • Python之itertools模块
    python的itertools模块介绍itertools模块是Python标准库中的一个模块,提供了多个用于迭代器和循环操作的函数。1.count方法:生成一个从指定起始数开始的整数序列(无穷迭代)函数功能:count函数生成一个无穷迭代器,用于生成一个整数序列。语法:itertools.count(start=0,step=1)参......
  • 免费搭建一个有脾气的聊天机器人,1行Python代码就够了!
    大家好,这里是程序员晚枫。之前在小破站:Python自动化办公社区给大家免费分享了用Python制作一个wx机器人,1行代码人人可用,很多人还想要免费的智能聊天功能。今天终于开发出来了,让我们一起看一下,如何用1行代码,实现智能聊天。我测试了很多次,回复一直很稳定,赶紧去试一下,这个机器人的......