Python的宽松JSON解析器

6

有没有适用于Python的“宽容”JSON解析器?

我一直在收到这样的(手写)JSON文件:

/* This JSON file is created by someone who does not know JSON
   And not competent enough to search about "JSON Validators" */

{

  /* Hey look!
     A honkin' block comment here!
     Yeehaw */

  "key1": "value1",  // Hey look there's a standard-breaking comment here!
  "key3": .65,       // I'm too lazy to type "0"
  "key4": -.75,      // That "other" .Net program works anyways...
  "key5": [ 1 /* One */, 2 /* Two */, 3 /* Three */, 4 /* Four */],
  "key2": "value2",  // Whoopsie, forgot to delete the comma here...
}

那个实际消耗这些异常JSON文件的程序不知何故并没有因这些错误而崩溃。顺便说一下,该程序是用C#编写的。
我正在使用Python编写一些脚本,根据这些JSON文件执行某些操作,但它一直在这些错误上崩溃(正确的)。
我可以手动编辑这些.json文件以符合标准...但是有很多文件,因此这太费力了--更不用说我还必须继续编辑新的JSON文件了,呃。
所以,回到我的问题,是否有一个宽容的JSON解析器可以消耗这些畸形的JSON文件而不会死机?
注意:此问题仅涉及最后一个对象的尾随逗号;它不处理块注释和/或行内注释。
编辑:我刚刚收到一个JSON文件,其中创建者决定删除0<数字<1的前导零... -_-

而且我发现了一个嵌入了注释的文件... :fuming_red:

我将更新上面的示例以反映我的额外“发现”...


1
这个gist可能会有所帮助,或者如果你只想使用库,可以使用jsoncomment - warl0ck
commentjson 库可能会有所帮助。 - GalAbra
1
@pepoluan 我知道,只是建议您在不使用库的情况下编写。顺便说一句:这不是我的要点,我知道这一点,因为我曾经在我的一个项目中使用过它。 - warl0ck
1
基本上,你想解析一些不遵循任何标准的东西,可能或可能不类似于Javascript的某个子集...祝你好运。这确实是需要在生产者端修复的问题。如果那里无法修复,那么...我猜只能自认倒霉了。 - deceze
1
@deceze让我想知道,是哪个孤注一掷的 .Net 库竟然接受这种不可思议的 JSON 混淆作为有效输入? - pepoluan
显示剩余5条评论
1个回答

2
好的,@warl0ck的评论让我想到,也许写一个自己的"JSON预处理器"来进行繁重的清理工作可能更好。
所以,在我的BitBucket代码片段中,这是它, 完整地附带了一个简单的单元测试。
我已经用我收集的人工生成的格式错误的JSON文件进行了测试,目前看起来效果还不错...
如果代码中有bug,请告诉我。
但暂时来说,我很满意。

编辑:由于BitBucket删除了我所有的代码片段,我将代码重新上传到GitHub:https://gist.github.com/pepoluan/361724bfa5cce9d863dadc6e2bdcb8c9


1
很高兴能够帮助。 - warl0ck
该仓库已不存在。 - Anm
1
@Anm 我回到家后会尝试重新上传预处理器。 - pepoluan
@Anm 我已经重新上传了代码到我的Gist。抱歉花了这么长时间,我得先重新找到代码。 - pepoluan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接