使用 jq 更改所有键的值

Change value for all keys with jq

我有这个package.json

{
  "dependencies": {
    "body-parser": "^1.19.0",
    "eslint": "^7.15.0",
    "express": "^4.17.1"
  } 
} 

使用此命令:

jq '.dependencies.eslint="latest"|.dependencies.express="latest"' package.json

我得到了这个结果:

{
  "dependencies": {
    "body-parser": "^1.19.0",
    "eslint": "latest",
    "express": "latest"
  }
}

如何在不枚举单个键的情况下将所有版本更改为“最新”?

像这样:

jq '.dependencies[]="latest"' package.json

输出:

{
  "dependencies": {
    "body-parser": "latest",
    "eslint": "latest",
    "express": "latest"
  }
}

简洁、精确且易于阅读的解决方案:

.dependencies |= map_values("latest")

如果 package.json 偶然包含嵌套项,如下所示:

{
  "dependencies": {
    "body-parser": "^1.19.0",
    "eslint": "^7.15.0",
    "express": "^4.17.1",
    "branch": {
        "alternative": "^1.2.3"
    }
  } 
}

然后使用 jtc 的替代(非 jq)解决方案如下所示:

<package.json jtc -w'<>a:' -u'"latest"'

- 该解决方案不会破坏原始 JSON 结构。

PS。我是 jtc unix JSON 处理器的开发者。
PPS。 SO 要求免责声明。