像这样的代码:
import json
s = '{ "key1": "value1", "key2": "value2", }'
json.loads(s)
在 Python 2 中引发以下错误:
ValueError:期望属性名称:第 1 行第 16 列(字符 15)
在 Python 3 中类似:
json.decoder.JSONDecodeError:期望用双引号括起来的属性名称:第 1 行第 16 列(字符 15)
当然,如果你把字典中最后一个值后面的逗号去掉,那么就不会出错了。但是如何在字典或列表的末尾用逗号准确地处理 JSON 呢?这是一件小事,此外,JavaScript 允许这样做。
例如,当您删除最后一个条目时,管理控制台中可能会出现这样的任务,以便快速手动编辑设置 - 我不想通过大海捞针并正确放置某种逗号来使用户紧张。
这个问题的翻译。
事实上,官方 JSON 标准假定列表或字典末尾存在额外的逗号是不正确的,因此官方解析器会发誓这样的小事。可能的解决方案:
1) 通过使用 RegEx 删除多余的字符来“修复”格式
我们修复:
帕西姆:
但是这种方法有一个重要的缺点,在某些情况下它会破坏字符串。这种行的一个例子:
{ "foo": ",}" }2)使用另一个解析器
标准模块有这样的替代品
json:json5是JSON5 标准的实现。允许您在列表/字典末尾使用单行和多行注释、多行行、不仅有带的行,
"还有带的行',以及逗号。jsoncomment - 功能基本相同,但该模块似乎不受支持,仅出于学术目的而提及。
这种方法也有一个重要的缺点:不幸的是,第三方库的工作速度比标准模块慢几十到几百倍,他们自己也承认这一点。因此,解决问题的方法的选择必须经过深思熟虑。
这个、这个和这个答案的翻译。
有一个肮脏的黑客: