You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用jq递归排序JSON嵌套对象适配WinMerge QueryJSON插件对比?

给WinMerge QueryJSON插件用的递归JSON属性排序方案

递归排序所有层级对象的jq命令

直接用jq的walk函数递归遍历所有JSON节点,自动对每个嵌套对象的属性按键排序:

QueryJSON "walk(if type == \"object\" then to_entries | sort_by(.key) | from_entries else . end)"

这个命令会处理所有层级的对象——不管是顶层还是嵌套在N层里的子对象,都会把属性按键名排序,不用再手动逐个指定嵌套路径。

简单解释

  • walk(...):遍历JSON的每一个节点,对每个节点执行后续逻辑
  • 遇到对象类型的节点,就转成键值对数组、按键排序、再转回对象;非对象(数组、字符串、数字这些)保持原样

可选:扁平化JSON为路径-值结构

如果接受扁平化处理,也可以把整个JSON转成“路径-值”的键值对形式,这样对比时完全不用管嵌套顺序:

QueryJSON "reduce paths as $path ({}; .[[$path[]|tostring]|join(\".\")] = getpath($path))"

比如原JSON里的Person.Age会变成键"Person.Age",对应值30,所有层级的属性都会平铺展开,对比起来更直观。

为什么你之前的方法没效果?

  • 原来的命令只处理了顶层对象,没递归处理嵌套节点
  • flatten是用来扁平化数组的,对对象结构不起作用,所以达不到预期效果

内容的提问来源于stack exchange,提问作者maximelian1986

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 11:00:58