【问题标题】:using jq : how can i use the same search in other field without duplicate code?使用 jq:我如何在其他字段中使用相同的搜索而不重复代码?
【发布时间】:2021-02-04 10:58:40
【问题描述】:

我有以下 json 文件为例:

{
    "FOO": {
        "name": "Donald",
        "location": "Stockholm"
    },
    "BAR": {
        "name": "Walt",
        "location": "Stockholm"
    },
    "BAZ": {
        "name": "Jack",
        "location": "Whereever"
    }
}

我有这个 jq 命令:

cat json | jq .[] | {newname : select(.location=="Stockholm") | .name , contains_w : select(.location=="Stockholm") | .name  | startswith("W")} 

所以我得到了结果:

{
  "newname": "Donald",
  "contains_w": false
}
{
  "newname": "Walt",
  "contains_w": true
}

我的问题是:有没有办法DRY我的命令?
我的意思是如果没有 duplicate 部分,我怎样才能得到相同的结果:

select(.location=="Stockholm") | .name 

如何重用 newname feild 的结果?

我有一个非常大的文件要处理,所以我不想浪费时间和资源。

【问题讨论】:

  • @Oguz_Ismail - 请取消删除您的答案!!!
  • @Ismail 你为什么要删除你的答案?真的很有帮助
  • @SoufianeELH - 他可能删除了它,因为你似乎改变了问题。请根据需要修改您的问题,以便如果有正确且有价值的答案,您准备“接受”它。

标签: json field jq


【解决方案1】:

您在对象构造期间进行了多次过滤。您可以先过滤,然后对过滤后的列表进行构造,例如。

map(select(.location=="Stockholm")) 
  | map({newname: .name, contains_w: (.name | startswith("W"))})

https://jqplay.org/s/aXjlgOEDnb

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-14
    • 2015-01-11
    • 2022-12-06
    • 2017-10-02
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多