jq 不显示空输出
jq does not show null output
我在命令行脚本中有以下代码:
output_json=$(jq -n \
--argjson ID "${id}" \
--arg Title "${title}" \
--argjson like "\"${like}\"" \
'$ARGS.named')
我将 id
、title
和 like
变量放入 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
逻辑将空字符串变成 null
。 if
语句即可,例如:
like=
jq -n --arg like "${like}" '{like: (if $like == "" then null else $like end)}'
{
"like": null
}
我在命令行脚本中有以下代码:
output_json=$(jq -n \
--argjson ID "${id}" \
--arg Title "${title}" \
--argjson like "\"${like}\"" \
'$ARGS.named')
我将 id
、title
和 like
变量放入 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
逻辑将空字符串变成 null
。 if
语句即可,例如:
like=
jq -n --arg like "${like}" '{like: (if $like == "" then null else $like end)}'
{
"like": null
}