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

JQ技术问询:Winmerge中以指定JSON为模板排序目标JSON

解决方案

要实现以左侧JSON为模板排序右侧JSON字段,同时适配Winmerge的JQ插件(需同时处理两个文件),可以借助JQ的keys_unsorted函数和reduce操作实现,具体如下:

核心逻辑

  1. 提取左侧JSON的字段原始顺序(不做额外排序)
  2. 按该顺序重新排列右侧JSON的字段
  3. 可选:保留右侧独有的字段并追加到排序后的字段之后

适配Winmerge的JQ命令

Winmerge的JQ插件会将两个对比文件作为输入,使用--slurp参数将两个文件读入一个JSON数组(第一个元素为左侧模板,第二个为右侧待排序文件):

jq --slurp '
.[0] | keys_unsorted as $templateKeys
| .[1] as $targetObj
| reduce $templateKeys[] as $key ({}; .[$key] = $targetObj[$key])
| + ($targetObj | delpaths($templateKeys | map([.])))
'

命令说明

  • --slurp:把两个输入文件合并为一个JSON数组,.[0]对应左侧模板文件,.[1]对应右侧待排序文件
  • keys_unsorted:获取左侧JSON对象的字段原始顺序(仅JQ 1.6+版本支持,低版本无此函数)
  • reduce:遍历左侧模板的字段顺序,依次将右侧对应字段的值写入新对象,保证字段位置与左侧完全匹配
  • 最后一行+ ($targetObj | delpaths(...)):将右侧独有的字段追加到排序后的对象末尾,不需要保留可直接删除该行

注意事项

  • 必须使用JQ 1.6及以上版本,否则无法通过keys_unsorted保留左侧的原始字段顺序
  • 在Winmerge的JQ插件配置中直接填入上述命令,即可实现自动按左侧模板排序右侧文件后再对比

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:37:58