jq:填充字段存在的对象床边

jq: populate object bedides of field exists

我正在使用这个过滤器:

map({
    name,
    deceased: (.deceased? // empty | split(" ") | first | strptime("%Y/%m/%d") | strftime("%F"))
})

输入对象是:

{
    "name": "name1",
    "birth": "1950/05/05",
    "deceased": "1982/05/19"
}
{
    "name": "name2",
    "birth": "1982/05/19"
}

我得到:

[
  {
    "name": "name1",
    "deceased": "1982-05-19"
  }
]

我需要得到:

[
  {
    "name": "name1",
    "deceased": "1982-05-19"
  },
  {
    "name": "name2"
  }
]

有什么想法吗?

您可以使用 has

测试是否存在
map(
  {name} +
  if has("deceased")
  then {deceased: (.deceased | strptime("%Y/%m/%d") | strftime("%F"))}
  else {}
  end
)
[
  {
    "name": "name1",
    "deceased": "1982-05-19"
  },
  {
    "name": "name2"
  }
]

Demo


如果 .deceased 只能作为字符串存在,那么这将是等价的:

map(
  {name, deceased}
  | .deceased |= (strings | strptime("%Y/%m/%d") | strftime("%F"))
)
[
  {
    "name": "name1",
    "deceased": "1982-05-19"
  },
  {
    "name": "name2"
  }
]

Demo