Bash jq 修改 json : 获取和设置

Bash jq modify json : get and set

我使用 jq 来解析和修改 cURL 响应,它完美地满足了我的所有需求,只有一个除外。我想修改json中的一个键值,比如:

A) 输入json

[
    {
        "id": 169,
        "path": "dir1/dir2"
    }
]

B) 输出json

[
    {
        "id": 169,
        "path": "dir1"
    }
]

因此最后一个目录已从路径中删除。我使用脚本:

curl --header -X GET -k "${URL}" | jq '[.[] | {id: .id, path: .path_with_namespace}]' | jq '(.[] | .path) = "${.path%/*}"'

最后一个管道当然不正确,这就是我被卡住的地方。重点是获取path值并修改。感谢任何帮助。

一种方法是使用 splitjoin 处理路径,并使用 |= 将正确的表达式绑定到 .path 属性。

... | jq '.[] | .path|=(split("/")[:-1]|join("/"))
  • split("/") 接受一个字符串,return 一个数组
  • x[:-1] returns 由 x
  • 的最后一个元素以外的所有元素组成的数组
  • join("/") 将传入数组的元素与 / 合并为 return 单个字符串。
  • .path|=x 获取 .path 的值,将其送入过滤器 x,然后再次将结果值赋给 .path