jq 不显示空输出

jq does not show null output

我在命令行脚本中有以下代码:

output_json=$(jq -n \
                 --argjson ID "${id}" \
                 --arg Title "${title}" \
                 --argjson like "\"${like}\"" \
                '$ARGS.named')

我将 idtitlelike 变量放入 jq 中。我得到以下输出:

[
  {
    "ID": 6,
    "Title": "ABC",
    "like": ""
  },
  {
    "ID": 22,
    "Title": "ABC",
    "like": "Yes"
  }
]

但是,我正在尝试以以下格式获取输出,即空值:

[
  {
    "ID": 6,
    "Title": "ABC",
    "like": null
  },
  {
    "ID": 22,
    "Title": "ABC",
    "like": "Yes"
  }
]

我不太明白一般情况下是否可以这样做,还是我的 jq 命令有问题?

据我了解 "like": """like": null 不同。我现在也有点迷茫,不太明白什么才是正确的选择。

通过使用 --argjson,您需要提供有效的 JSON-encoded 参数,因此如果您想要接收 null,则该值必须是 null。但是,您的解决方案在其周围添加了引号,因此永远无法将其计算为 null。 (此外,如果它遵循特殊字符(例如引号字符本身)的 JSON 编码,它只会是一个有效的 JSON 字符串。

如果你想在常规情况下有一个 JSON 字符串,而在它为空的情况下 null ,使用 [= 将 ${like} 的内容导入为字符串18=] 并且没有额外的引号(就像你对 ${title} 所做的那样),然后使用一些 jq 逻辑将空字符串变成 nullif 语句即可,例如:

like=
jq -n --arg like "${like}" '{like: (if $like == "" then null else $like end)}'
{
  "like": null
}