jq是否可以在设置新值时使用已删除的值?

时间:2018-06-19 21:37:43

标签: linux bash shell sh jq

我正在使用bash到json解析器jq

考虑以下命令:

jq '. * .transitive | del(.transitive) | del(.scope,.scopedName)' package.json > package.github.json$$

以及以下输入

{
  "name": "navigation",
  "transitive": {
    "name": "navigation",
    "scope": "bs",
    "scopedName": "@bs/navigation"
  }
}

我正在尝试获得以下输出

{
  "name": "@bs/navigation"
}

在删除.scopedName之前是否有办法使用它的值来设置.name

1 个答案:

答案 0 :(得分:2)

将输入转换为输出非常简单:

jq '{"name": .transitive.scopedName}'

...当然,您可以重新排序以设置name 之前删除transitive

jq '.name=.transitive.scopedName | del(.transitive)'

也就是说,如果您真的想先使用del(),则可以将内容保存在变量中,以后再使用:

jq '
  .transitive as $transitive |
  del(.transitive) |
  .name=$transitive.scopedName
'