jq:避免空数组映射字段

jq: avoid empty arrays mapped field

这是我的 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"
}

以上脚本returns:

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

我希望extension不出现:

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

有什么想法吗?

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

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

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

您只需添加

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

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

Demo