大型JSON数据的JSON差异,找到一些JSON作为另一个JSON的子集

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

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

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

更严峻的是JSON对象非常庞大。 如果您通过Windows记事本打印,则其中一页跨页。 其他跨越37页。 这些API将JSON输出压缩为单行。 普通文本比较没有太大的作用,我不得不手动重新格式化,或者使用脚本来分割对象,换行符等,以便文本比较运行良好。 试用Beyond Compare工具。

我可以执行手动搜索/ grep,但是在小型JSON中循环遍历所有参数是一种痛苦。 可以编写代码来做到这一点,但我也必须花时间来做到这一点,并测试代码是否也能工作。 或者,也许有一些现成的代码已经为此...

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

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

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

都没有做到我想要的。 据推测,JSON要么太复杂,要么太大而无法处理。

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

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

很抱歉,无法与您共享JSON数据结构,因此可能会被视为保密信息。


Beyond Compare可以很好地工作,如果您在其中设置JSON文件格式以使用Python来漂亮地打印JSON。 Windows的样本设置:

  • 安装Python 2.7。
  • 在比较之后,在文件格式下的工具下进行。
  • 点击新建。 选择文本格式。 输入“JSON”作为名称。
  • 在常规标签下:
  • 掩码: *.json
  • 在转化标签下:
  • 转换:外部程序(Unicode文件名)
  • 加载: c:Python27python.exe -m json.tool %s %t
  • 请注意,命令行中的第二个参数必须是%t ,如果输入两个%s s,您将遭受数据丢失。
  • 点击保存。

  • Jeremy Simmons创建了一个更好的文件格式包发布在论坛上:“JsonFileFormat.bcpkg”用于BEYOND COMPARE,它不需要安装python左右。

    只需下载文件并用BC打开它,你就可以走了。 所以,它更简单。

    JSON文件格式

    我需要JSON文件的文件格式。

    我想漂亮地打印和排序我的JSON,以便比较简单。

    我使用完整的JSON文件格式附加了我的bcpackage。

    格式化通过jq完成 - http://stedolan.github.io/jq/

    道具到斯蒂芬多兰的实用程序https://github.com/stedolan。

    我发送了一条消息给Scooter Software的人们,要求他们将这些消息以其他格式包含在页面中。

    如果你有兴趣在那里看到它,我确信通过加票快速回复主题会帮助他们看到发布它的值。 附加文件附件文件文件类型:bcpkg JsonFileFormat.bcpkg(449.8 KB,58次)


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

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

    https://github.com/danielbchapman/groups

    API基本上用 - >来使用

    SubGroup items = group
                      .notEqual("field", "value")
                      .lessThan("field2", 50); //...etc...
    

    实际上对基本联合和联接的支持几乎可以满足你的需求。

    多空你可能想要一个Set作为你的数据类型。 考虑到你的比较可能很复杂,你需要一套更复杂的方法。

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

    链接地址: http://www.djcxy.com/p/8273.html

    上一篇: JSON diff of large JSON data, finding some JSON as a subset of another JSON

    下一篇: A list of useful Python commands for Vim?