我有一个包含jsonlines的文件,希望找到空值。
{"name": "Color TV", "price": "1200", "available": ""} {"name": "DVD player", "price": "200", "color": null}
并希望输出空和/或空值及其键:
available: "" color: null
我认为它应该是类似cat myexample | jq '. | select(. == "")'的东西,但不起作用。
cat myexample | jq '. | select(. == "")'
oogrdqng1#
这里比较棘手的部分是发出不带引号的键,而空字符串用引号显示,这里有一个使用jq的-r命令行选项的解决方案:
to_entries[] | select(.value | . == null or . == "") | if .value == "" then .value |= "\"\(.)\"" else . end | "\(.key): \(.value)"
一旦给定的输入以显而易见的方式被修改为有效的JSON,输出就与指定的完全相同。
uwopmtnx2#
有些人可能会发现下面的jq程序对于识别带有null或空字符串值的键更有用:
with_entries(select(.value |.==null or . == ""))
使用示例输入,此程序将生成:
{"available":""} {"color":null}
添加更多信息,如输入行或对象编号,也是有意义的,例如:
with_entries(select(.value |.==null or . == "")) | select(length>0) | {n: input_line_number} + .
unhi4e5o3#
使用一个with_entries(if .value == null or .value == " then empty else . end)过滤器表达式,可以过滤掉null和空("")值。未过滤:
with_entries(if .value == null or .value == " then empty else . end)
null
""
echo '{"foo": null, "bar": ""}' | jq '.' { "foo": null, "bar": "" }
带过滤:
s3 echo '{"foo": null, "bar": ""}' | jq 'with_entries(if .value == null or .value == "" then empty else . end)' {}
mf98qq944#
看一下这个代码片段https://blog.nem.ec/code-snippets/jq-ignore-nulls/
jq -r '.firstName | select( . != null )' file.json
4条答案
按热度按时间oogrdqng1#
这里比较棘手的部分是发出不带引号的键,而空字符串用引号显示,这里有一个使用jq的-r命令行选项的解决方案:
一旦给定的输入以显而易见的方式被修改为有效的JSON,输出就与指定的完全相同。
uwopmtnx2#
有些人可能会发现下面的jq程序对于识别带有null或空字符串值的键更有用:
使用示例输入,此程序将生成:
添加更多信息,如输入行或对象编号,也是有意义的,例如:
unhi4e5o3#
使用一个
with_entries(if .value == null or .value == " then empty else . end)
过滤器表达式,可以过滤掉null
和空(""
)值。未过滤:
带过滤:
mf98qq944#
看一下这个代码片段https://blog.nem.ec/code-snippets/jq-ignore-nulls/