【发布时间】:2012-10-09 01:24:15
【问题描述】:
我有一个问题想解决,而不必花费大量手动工作来分析。
我有 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 太复杂或太大而无法处理。
关于最佳解决方案的任何想法?或者目前最好的解决方案是使用 grep 对每个参数/属性进行手动分析?
就代码解决方案而言,任何语言都可以。我只需要一个解析器或差异工具来满足我的需求。
抱歉,也无法与您共享 JSON 数据结构,可能会被视为机密。
【问题讨论】:
-
您知道您可以使用换行符和缩进轻松漂亮地打印 JSON 数据吗?
-
FWIW:JSON 文本的 37 个显示页面远非“巨大”;我不会认为它“大”,而只是“不小”。
-
@user1689607,你如何漂亮地打印 JSON 数据?我不是 ajax/jquery/js Web 开发人员,没有使用最新技术进行 Web 开发,几年前只做过非 ajax 的东西。我现在只是测试应用程序。
-
@Software Monkey,真的。但与人们在谈论或演示 JSON diff 时给出的示例相比,这是巨大的。与 XML 相同。如果人们也提供复杂的大型结构示例,那就太好了。
-
@David:在 JavaScript 环境中,首先将 JSON 解析为 JavaScript 对象,然后使用 indentation 参数对其进行字符串化。
var parsed = JSON.parse(jsonString); jsonString = JSON.stringify(parsed, null, 4); console.log(jsonString);JSON.stringify的第三个参数允许您设置缩进大小或字符,因此可以很好地打印出换行符和缩进。
标签: javascript json diff