我有一个包含JSON行的文件,希望查找空值。
{"name": "Color TV", "price": "1200", "available": ""}
{"name": "DVD player", "price": "200", "color": null}
我希望输出空值和/或null值及其键:
available: ""
color: null
我认为应该像这样:cat myexample | jq '. | select(. == "")'
,但它没有起作用。
我有一个包含JSON行的文件,希望查找空值。
{"name": "Color TV", "price": "1200", "available": ""}
{"name": "DVD player", "price": "200", "color": null}
我希望输出空值和/或null值及其键:
available: ""
color: null
我认为应该像这样:cat myexample | jq '. | select(. == "")'
,但它没有起作用。
这里的棘手之处在于以一种不带引号的方式发出键,并以引号显示空字符串。以下是一种使用jq的-r命令行选项的解决方案:
这里的难点在于以一种不带引号的方式输出键,同时要以引号的形式显示空字符串。以下是一个使用jq的-r命令行选项的解决方案:to_entries[]
| select(.value | . == null or . == "")
| if .value == "" then .value |= "\"\(.)\"" else . end
| "\(.key): \(.value)"
一旦给定的输入以明显的方式被修改为有效的JSON格式,输出就会完全按照规定。
以下 jq 程序可能更有用,可用于识别具有 null 或空字符串值的键:
with_entries(select(.value |.==null or . == ""))
{"available":""}
{"color":null}
增加更多信息,例如输入行或对象编号,也是有意义的,例如:
with_entries(select(.value |.==null or . == ""))
| select(length>0)
| {n: input_line_number} + .
看一下这段代码片段 https://blog.nem.ec/code-snippets/jq-ignore-nulls/
jq -r '.firstName | select( . != null )' file.json
jq -r '.firstName | select(.)' file.json
- undefinedwith_entries(if .value == null or .value == "" then empty else . end)
过滤器表达式,就可以过滤掉null
和空 (""
) 值。echo '{"foo": null, "bar": ""}' | jq '.'
{
"foo": null,
"bar": ""
}
使用过滤:
echo '{"foo": null, "bar": ""}' | jq 'with_entries(if .value == null or .value == "" then empty else . end)'
{}
select(.)
来过滤掉空值。