[英]Filter empty and/or null values with jq
我有一個包含 jsonlines 的文件,想查找空值。
{"name": "Color TV", "price": "1200", "available": ""}
{"name": "DVD player", "price": "200", "color": null}
並希望 output 為空和/或 null 值及其鍵:
available: ""
color: null
我認為它應該類似於cat myexample | jq '. | select(. == "")'
cat myexample | jq '. | select(. == "")'
cat myexample | jq '. | select(. == "")'
,但不起作用。
這里棘手的部分是以空字符串顯示帶引號的方式發出不帶引號的鍵。 這是一種適用於 jq 的 -r 命令行選項的解決方案:
to_entries[]
| select(.value | . == null or . == "")
| if .value == "" then .value |= "\"\(.)\"" else . end
| "\(.key): \(.value)"
一旦以明顯的方式修改了給定的輸入以使其成為有效的 JSON,輸出就完全符合指定的要求。
使用單個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)'
{}
下面的代碼片段使用Object.keys()從對象鍵中創建一個數組。 然后,它遍歷該數組並測試每個鍵的null ||。 空字符串。 它創建一個keyName:值的obj並將其推入emptyKeys arr,然后在完成后將其記錄到控制台。
const obj0 = {"name": "Color TV", "price": "1200", available: ""}, obj1 = {"name": "DVD player", "price": "200", color: null}; function extractNullKeys(obj) { const emptyKeys = []; Object.keys(obj).forEach(function (k) { (obj[k] == null || obj[k] == "") && emptyKeys.push({ [k] : obj[k]}); }); console.log(emptyKeys); } extractNullKeys(obj0); extractNullKeys(obj1);
有些人可能會發現以下 jq 程序對於識別具有 null 或空字符串值的鍵更有用:
with_entries(select(.value |.==null or . == ""))
使用樣本輸入,該程序將產生:
{"available":""}
{"color":null}
添加更多信息,例如輸入行或對象編號,也很有意義,例如:
with_entries(select(.value |.==null or . == ""))
| select(length>0)
| {n: input_line_number} + .
jq . | grep -E '(null|0|""|\[\]|\{\}),?$'
看看這個片段https://blog.nem.ec/code-snippets/jq-ignore-nulls/
jq -r '.firstName | select( . != null )' file.json
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.