我注意到,单引号引起simplejson的loads功能失效:
>>> import simplejson as json
>>> json.loads("\"foo\"")
'foo'
>>> json.loads("\'foo\'")
Traceback (most recent call last):
...
ValueError: No JSON object could be decoded
Run Code Online (Sandbox Code Playgroud)
我正在解析这样的事情:foo = ["a", "b", "c"]从文本文件到Python中的列表,并且也想接受foo = ['a', 'b', 'c'].simplejson方便foo自动进入列表.
如何loads在不破坏输入的情况下接受单引号,或自动将双引号替换为单引号?谢谢.
Mar*_*ers 35
使用适当的工具,你不是解析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']
Run Code Online (Sandbox Code Playgroud)
JSON文件总是使用字符串双引号,使用UTF-16 \uhhhh进制转义语法,具有{...}与键始终字符串和序列键值对对象都[...]列出和使用null,true和false值; 注意小写的布尔值.数字以整数和浮点形式出现.
在Python中,字符串表示可以使用单引号和双引号,Unicode转义使用\uhhhh和\Uhhhhhhhh形式(无UTF-16代理对),使用词典{...}显示语法可以在许多不同的类型,而不是只是字符串键,序列可以是列表([...]),但是可以也可以使用元组((...)),或者你可以使用其他容器类型.Python有None,True而且False(Titlecase!)和数字有整数,浮点数和复数形式.
当解码成功但数据被错误地解释时,例如使用转义的非BMP代码点(例如表情符号),将一方与另一方混淆可能导致解析错误或细微问题.确保使用正确的方法解码它们!在大多数情况下,如果你有Python语法数据,有人实际使用了错误的编码方法,只是偶然产生了Python表示.在这种情况下看看源是否需要修复; 通常使用应该使用的str(object)地方json.dumps(obj)来产生输出.