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-diff或https://tlrobinson.net/projects/javascript-fun/jsondiff
https://github.com/andreyvit/json-diff
都没能做我想做的事.据推测,JSON太复杂或太大而无法处理.
有关最佳解决方案的想法?或者现在可能最好的解决方案是每个参数/属性的grep手动分析?
就代码解决方案而言,任何语言都可以.我只需要一个解析器或差异工具来完成我想要的工作.
抱歉,无法与您共享JSON数据结构,可能会被视为机密.
Jos*_*ley 10
Beyond Compare运行良好,如果你在其中设置JSON文件格式以使用Python来打印JSON.Windows的示例设置:
*.jsonc:\Python27\python.exe -m json.tool %s %t
%t,如果输入两个参数,%s则会导致数据丢失.我有一个小型 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。如果您的数据是机密的,您可能对该许可证不感兴趣。