【问题标题】:jq: avoid empty arrays mapped fieldjq:避免空数组映射字段
【发布时间】:2021-12-23 21:38:57
【问题描述】:

这是我的 jq 脚本:

def pick_nationality:
  select(.NACIONALITAT) |
  {nation: {country: .NACIONALITAT, code: "some code"} };

def pick_surname: 
  select(.SURNAME) |
  {name: {surname: .SURNAME, code: "some code"} };

def pick_extension:
  { use: "official", extension: [pick_nationality, pick_surname] };

map(pick_extension)

输入json是这样的:

{
  "SURNAME": "surname1"
}
{
  "NACIONALITAT": "nacionalitat1"
}

但是,有时任何输入对象都不包含任何查找字段:

{
  "field1": "value1"
}
{
  "field2": "value2"
}

以上脚本返回:

[
  {
    "use": "official",
    "extension": []
  },
  {
    "use": "official",
    "extension": []
  }
]

我希望extension 不出现:

[
  {
    "use": "official"
  },
  {
    "use": "official"
  }
]

有什么想法吗?

【问题讨论】:

    标签: jq


    【解决方案1】:

    你可以简单地添加

    | del(..|select(. == []))
    

    作为脚本的尾随,以便删除所有此类空数组

    Demo

    【讨论】:

      【解决方案2】:

      扩展您的函数pick_extension 以获得所需的输出:

      def pick_extension:
        [pick_nationality, pick_surname] as $extension
        | { use: "official" }
        | if $extension | length > 0 then . + {extension: $extension} else . end;
      

      如果无法选择扩展名,空数组将不再以这种方式添加到 json 对象中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-07
        • 1970-01-01
        • 1970-01-01
        • 2019-12-07
        • 1970-01-01
        • 2021-01-19
        • 2011-08-12
        • 2017-11-07
        相关资源
        最近更新 更多