python - 用于 Python 的 Lenient JSON 解析器

标签 python json

是否有适用于 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 文件,呃。

所以,回到我的问题,是否有一个lenient JSON 解析器可以在不死机的情况下使用那些格式错误的 JSON 文件?

注意: This question只关注最后一个对象的尾随逗号;它不处理 block 注释和/或内联注释。


编辑: 什么...我刚刚收到一个 JSON 文件,其中创建者决定删除 0 < numbers < 1 ... 的前导零 ... -_-

然后我发现了一个嵌入评论的文件...:fuming_red:

我将更新上面的示例以反射(reflect)我的额外“发现”...

最佳答案

好吧,@warl0ck 的评论让我觉得我最好还是编写自己的“JSON 预处理器” 来进行繁重的清理工作。

所以,here it is in my BitBucket Snippet ,完成一个简单的单元测试。

我已经用我的人为生成的格式错误的 JSON 文件语料库对其进行了测试,到目前为止它似乎运行良好...

如果代码中有错误,请告诉我。

但就目前而言,我很满足。

关于python - 用于 Python 的 Lenient JSON 解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56697942/

相关文章:

python - django.db.utils.OperationalError 无论我尝试什么

python - 查找相关对象并显示关系

jquery - 使用 JSON 对 jQuery 函数进行排序

java - 直接从数据库结果集转换为 JSON

python - 使用 py2exe 打包时不包含 key 环模块

python - list.append 或 list +=?

python - 根据文件名比较目录

c# - Newtonsoft.Json.Linq.JArray 到字符串数组 C#

json - _CastError(类型 '_InternalLinkedHashMap<dynamic, dynamic>' 不是类型转换中类型 'Map<String, dynamic>' 的子类型)

python - 如何设置在 QTextBrowser 链接中使用哪个浏览器?