当前位置: 首页 > 面试题库 >

Python中JSON加载中的单引号与双引号

祁兴运
2023-03-14
问题内容

我注意到单引号导致simplejsonloads功能失败:

>>> import simplejson as json
>>> json.loads("\"foo\"")
'foo'
>>> json.loads("\'foo\'")
Traceback (most recent call last):
...
ValueError: No JSON object could be decoded

我正在解析以下内容:foo = ["a", "b", "c"]从文本文件转换为Python中的列表,并且也想接受foo = ['a', 'b', 'c']simplejson便于foo自动将其放入列表。

我如何才能loads接受单引号,或在不破坏输入的情况下自动将双引号替换为单引号?谢谢。


问题答案:

使用适合该工作的工具,您不是在解析JSON,而是在解析Python,因此请ast.literal_eval()改用:

>>> import ast
>>> ast.literal_eval('["a", "b", "c"]')
['a', 'b', 'c']
>>> ast.literal_eval("['a', 'b', 'c']")
['a', 'b', 'c']
>>> ast.literal_eval('["mixed", \'quoting\', """styles"""]')
['mixed', 'quoting', 'styles']
  • JSON文件总是使用字符串双引号,使用UTF-16 \uhhhh进制转义语法,具有{...}与键始终字符串键值对的对象和序列总是[...]名单和使用nulltruefalse值; 请注意小写的布尔值。数字以整数和浮点数形式出现。

  • 在Python中,字符串表示形式可以使用单引号和双引号,Unicode可以转义使用形式\uhhhh\Uhhhhhhhh形式(没有UTF-16代理对),具有{...}显示语法的字典可以具有许多不同类型的键,而不仅仅是字符串,序列可以是列表([...]),但可以也可以使用元组((...)),否则您仍然可以使用其他容器类型。Python具有NoneTrueFalse(Titlecase!),数字以整数,浮点数和复杂形式出现。

当解码碰巧成功但数据被错误地解释时(例如使用逃脱的非BMP代码点(如Emoji)),将彼此混淆会导致解析错误或细微问题。确保使用正确的方法对其进行解码!在大多数情况下,当您确实拥有Python语法数据时,某人实际上使用了错误的编码方法,并且仅偶然生成了Python表示形式。查看在这种情况下源是否需要修复;通常,输出是通过使用应该代替str(object)where的方式产生的json.dumps(obj)



 类似资料:
  • 问题内容: 我的代码: 定义是错误的 定义是正确的 我听说在Python中 单 引号和 双 引号可以互换。谁能向我解释一下? 问题答案: JSON语法不是Python语法。JSON的字符串需要双引号。

  • 问题内容: Python中的单引号与双引号 问题答案: 我喜欢在用于插值或自然语言消息的字符串周围使用双引号,对于像符号一样小的字符串使用单引号,但是如果字符串包含引号或者我忘记了,则会违反规则。我对文档字符串使用三重双引号,对正则表达式使用原始字符串文字,即使不需要它们也是如此。 例如:

  • 问题内容: 手动编写HTML时,我总是使用单引号。我使用很多渲染的HTML,这些HTML总是使用双引号。这使我可以确定HTML是手工编写的还是生成的。这是一个好主意吗? 两者有什么区别?我知道它们都可以工作,并且得到所有现代浏览器的支持,但是在不同情况下,一个实际上比另一个更好吗? 问题答案: W3组织说: 默认情况下,SGML要求使用双引号(ASCII十进制34)或单引号(ASCII十进制39)

  • 我是gradle的新手,目前只是试图遵循教程,有很多次我看到单引号和双引号混杂在一起。我只是想知道是否有一个不同的时间应该使用一套比另一个。这方面的一个例子是教程的第6.12节--默认任务: 所以,我只想知道我是否应该注意这些差异,或者它们是否可以相互改变,我可以使用单引号或双引号时打印字符串在Gradle。

  • 问题内容: 如何在Python中用反斜杠和双引号替换双引号? 我想得到以下内容: 问题答案: 当您只要求’s’时,它会为您转义\,在打印时,您会看到字符串处于更“原始”状态。所以现在

  • 问题内容: 在node.js(服务器端)上工作时,我想知道是否应该一直使用所有反引号(`)而不是常规引号(“或’),因为这会使代码保持一致。为不同的事物保留不同类型的报价,如果所有非替代报价都转换为反向报价,会影响性能吗? 问题答案: 反引号允许您使用字符串模板,例如: 对于vs 我说看看这 不同之处在于您不需要在单引号中转义单引号或在单引号中转义双引号。这是唯一的区别,如果您不算必须按住Shif