大型JSON数据的JSON diff,发现一些JSON作为另一个JSON的子集

Dav*_*vid 9 javascript diff json

我有一个问题,我想解决,而不必花费大量的手工工作来分析作为替代.

我有2个JSON对象(从不同的Web服务API或HTTP响应返回).2个JSON对象之间存在交叉数据,它们共享类似的JSON结构,但不完全相同.一个JSON(较小的一个)就像是较大的JSON对象的子集.

我想找到两个对象之间的所有相互关联的数据.实际上,我对对象中的共享参数/属性更感兴趣,而不是每个对象的参数/属性的实际值.因为我想最终使用来自一个JSON输出的数据来构造另一个JSON作为API调用的输入.不幸的是,我没有为每个API定义JSON的文档.:(

更难的是JSON对象是巨大的.如果您通过Windows记事本打印出来,则会跨页面.另一篇涉及37页.API返回压缩为单行的JSON输出.普通文本比较没有太大作用,我必须手动重新格式化或用脚本来分解对象w /换行符等,以便文本比较工作正常.尝试使用Beyond Compare工具.

我可以进行手动搜索/ grep,但是在较小的JSON中遍历所有参数是很痛苦的.可以写代码来做,但我还要花时间去做,并测试代码是否也能正常工作.或者可能已经有一些现成的代码......

或者可以查找JSON diff类型工具.搜索了一些.碰到这些:

https://github.com/samsonjs/json-diffhttps://tlrobinson.net/projects/javascript-fun/jsondiff

https://github.com/andreyvit/json-diff

都没能做我想做的事.据推测,JSON太复杂或太大而无法处理.

有关最佳解决方案的想法?或者现在可能最好的解决方案是每个参数/属性的grep手动分析?

就代码解决方案而言,任何语言都可以.我只需要一个解析器或差异工具来完成我想要的工作.

抱歉,无法与您共享JSON数据结构,可能会被视为机密.

Jos*_*ley 10

Beyond Compare运行良好,如果你在其中设置JSON文件格式以使用Python来打印JSON.Windows的示例设置:

  1. 安装Python 2.7.
  2. 在Beyond Compare中,在File Formats下的Tools下.
  3. 单击新建.选择文本格式.输入"JSON"作为名称.
  4. 在"常规"选项卡下:
    • 面具: *.json
  5. 在转换标签下:
    • 转换:外部程序(Unicode文件名)
    • 加载: c:\Python27\python.exe -m json.tool %s %t
      • 注意,命令行中的第二个参数必须是%t,如果输入两个参数,%s则会导致数据丢失.
  6. 单击保存.

  • 另请注意,如果您要比较来自属性顺序不同的两个源的 JSON,则可能需要将 `--sort-keys` 添加到命令行参数。因此,我的 Beyond Compare“加载”设置是: `C:\Users\<user>\AppData\Local\Programs\Python\Python37-32\python.exe -m json.tool %s %t --sort-keys `。 (2认同)

Dan*_*man 0

我有一个小型 GPL 项目,可以解决简单的JSON问题。我没有添加对嵌套实体的支持,因为它更像是一个简单的 ObjectDB 解决方案,而不是实际上的 JSON(尽管事实上它显然是受它启发的。

总而言之,API 非常简单。创建一个新组,填充它,然后通过您需要的任何逻辑参数提取一个子集。

https://github.com/danielbchapman/groups

API 的使用方式基本上是这样的 ->

SubGroup items = group
                  .notEqual("field", "value")
                  .lessThan("field2", 50); //...etc...
Run Code Online (Sandbox Code Playgroud)

实际上支持基本的联合和连接,这几乎可以满足您的要求。

总而言之,您可能需要一个 Set 作为您的数据类型。考虑到您的比较可能很复杂,您需要一组更复杂的方法。

我唯一要注意的是它是 GPL。如果您的数据是机密的,您可能对该许可证不感兴趣。