我有一个问题想要解决,而不需要花费大量的手动工作来分析作为替代方案。
我有 2 个 JSON 对象(从不同的 Web 服务 API 或 HTTP 响应返回)。 2 个 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 要么太复杂,要么太大而无法处理。
对最佳解决方案有什么想法吗?或者现在最好的解决方案可能是使用 grep 对每个参数/属性进行手动分析?
就代码解决方案而言,任何语言都可以。我只需要一个解析器或 diff 工具来完成我想要的任务。
抱歉,也无法与您分享 JSON 数据结构,它可能被视为机密。
Python 漂亮地打印 JSON,则 Beyond Compare 效果很好。 Windows 的示例设置:
*.json
c:\Python27\python.exe -m json.tool %s %t
%t
,如果输入两个%s
,将会导致数据丢失。Jeremy Simmons 创建了一个更好的文件格式包 发布在论坛上:“JsonFileFormat.bcpkg” 用于 BEYOND COMPARE 不需要安装 python 等。
只需下载文件并使用 BC 打开即可。所以,它更简单。
JSON 文件格式
我需要 JSON 文件的文件格式。
我想对我的 JSON 进行漂亮的打印和排序,以便于比较。
我已附上我的 bcpackage 和我完成的 JSON 文件格式。
格式化是通过 jq 完成的 - http://stedolan.github.io/jq/
支持 Stephen Dolan 的实用程序 https://github.com/stedolan.
我已经向 Scooter Software 的人员发送了一条消息,要求他们 将其包含在具有附加格式的页面中。
如果您有兴趣在那里看到它,我肯定会快速回复 具有赞成票的帖子将帮助他们看到发布该帖子的价值。 附加文件 附加文件 文件类型:bcpkg JsonFileFormat.bcpkg (449.8 KB,58 次浏览)
我有一个小型 GPL 项目,可以解决 simple JSON 的问题。我没有添加对嵌套实体的支持,因为它更像是一个简单的 ObjectDB 解决方案,而不是实际上的 JSON(尽管事实上它显然是受它启发的。
总而言之,API 非常简单。创建一个新组,填充它,然后通过您需要的任何逻辑参数提取一个子集。
https://github.com/danielbchapman/groups
API的使用方式基本上就像->
SubGroup items = group
.notEqual("field", "value")
.lessThan("field2", 50); //...etc...
实际上支持基本的联合和连接,这几乎可以满足您的需求。
总而言之,您可能需要一个 Set 作为您的数据类型。考虑到您的比较可能很复杂,您需要一组更复杂的方法。
我唯一要注意的是它是 GPL。如果您的数据是机密的,您可能对该许可证不感兴趣。