【发布时间】:2019-07-08 10:06:08
【问题描述】:
我使用 json-library 将字符串转换为 json 对象:
a = '{"index":1}'
import json
json.loads(a)
{'index': 1}
但是,如果我改为将字符串 a 更改为包含前导 0,那么它就会崩溃:
a = '{"index":01}'
import json
json.loads(a)
>>> JSONDecodeError: Expecting ',' delimiter
我认为这是因为如果整数以前导零开头,则它是无效的 JSON,如 thread 中所述。
有没有办法解决这个问题?如果不是,那么我想最好的方法是首先通过正则表达式从字符串中删除任何前导零,然后转换为 json?
【问题讨论】:
-
只有
index键受此影响吗? -
@aws_apprentice 不,以上只是一个示例。我的 JSON 字符串很长,所以理想情况下应该编写一个函数来为字符串中的任何数字加上引号(我猜?)
-
你能用你的 json 字符串分享一个 pastebin 链接吗?
-
你必须使用你自己的解码器在这里查看类似的帖子。 stackoverflow.com/questions/45068797/…
-
@AbinayaDevarajan 一个数字不能以
0开头,除非它只是0或以0.开头,这在json模块中非常重要。上述问题中描述的技术仅在json识别出该数字是有效的 JSON 数字文字时才有效。很难绕过这个限制,您必须放弃使用内部json.scanner模块的C 实现,并在扫描仪的Python 实现中修改全局正则表达式。这是一个非常丑陋的黑客攻击。