【发布时间】:2020-02-20 20:12:10
【问题描述】:
我正在尝试解析一些 json 并将某些部分放入变量中。不过,我想我不了解变量的工作原理。
json:
{
"resources": [
{
"type": "Microsoft.ApiManagement/service/apis"
},
{
"type": "Microsoft.ApiManagement/service/apis/schemas"
}
]
}
然后使用这个jq:
.resources[] | select(.type == "Microsoft.ApiManagement/service/apis") as $apis | { types: [.type], apis: $apis}
我明白了:
{
"types": [
"Microsoft.ApiManagement/service/apis"
],
"apis": {
"type": "Microsoft.ApiManagement/service/apis"
}
}
当我预料到这一点时:
{
"types": [
"Microsoft.ApiManagement/service/apis",
"Microsoft.ApiManagement/service/apis/schemas"
],
"apis": {
"type": "Microsoft.ApiManagement/service/apis"
}
}
https://jqplay.org/s/4aeBOY9x6q
根据jq manual的变量部分
表达式 exp 为 $x | ... 表示:对于表达式的每个值 exp,使用整个原始输入运行管道的其余部分,以及 将 $x 设置为该值。因此,作为某种 foreach 的功能 循环。
这让我认为 .type 应该从原始集合返回,而不是我存储在 $apis 中的过滤结果。断开连接在哪里?
【问题讨论】: