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

jq 1.7中leaf_paths内置函数失效,求替代实现方案

解决jq 1.7中leaf_paths失效的问题

直接替代方案

jq 1.7移除了leaf_paths/0内置函数,改用更灵活的paths(leaf)实现相同功能。把你原有命令里的leaf_paths替换成paths(leaf)即可正常运行。

比如原来的jq 1.6命令:

jq -r 'leaf_paths as $path | {"key": $path | join("."), "value": getpath($path)}' input.json

改成jq 1.7兼容版本:

jq -r 'paths(leaf) as $path | {"key": $path | join("."), "value": getpath($path)}' input.json

跨版本兼容写法

如果需要同时适配jq 1.6和1.7,可以自定义一个leaf_paths函数,放在脚本开头:

def leaf_paths: paths | select(.[-1] | leaf);

# 后续写你的扁平化逻辑
leaf_paths as $path | {"key": $path | join("."), "value": getpath($path)}

执行时使用:

jq -f flatten.jq input.json

示例验证

测试JSON(input.json):

{
  "user": {
    "name": "Alice",
    "contact": {
      "email": "alice@example.com",
      "phones": ["123456", "789012"]
    },
    "active": true
  }
}

执行命令后输出:

{"key":"user.name","value":"Alice"}
{"key":"user.contact.email","value":"alice@example.com"}
{"key":"user.contact.phones.0","value":"123456"}
{"key":"user.contact.phones.1","value":"789012"}
{"key":"user.active","value":true}

原因说明

jq 1.7对路径相关函数做了重构,paths/1支持传入筛选条件(leaf、array、object等),替代了旧版本中专用的leaf_paths、array_paths等函数,让路径筛选逻辑更统一灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 06:05:55