我有一个带有jsonlines的文件,想查找空值。
{"name": "Color TV", "price": "1200", "available": ""}
{"name": "DVD player", "price": "200", "color": null}
并希望输出空值和/或空值及其键:
available: ""
color: null
我认为应该是cat myexample | jq '. | selec(. == "")'
之类的东西,但是不起作用。
答案 0 :(得分:0)
以下代码段使用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);
答案 1 :(得分:0)
这里最棘手的部分是发出带有引号的空字符串,而引号没有引号。这是与jq的-r命令行选项一起使用的一种解决方案:
to_entries[]
| select(.value | . == null or . == "")
| if .value == "" then .value |= "\"\(.)\"" else . end
| "\(.key): \(.value)"
一旦以明显的方式修改了给定的输入以使其有效为JSON,则输出将完全按照指定的方式进行。
答案 2 :(得分:0)
有些人可能会发现以下 jq 程序对于识别具有 null 或空字符串值的键更有用:
with_entries(select(.value |.==null or . == ""))
使用示例输入,该程序将产生:
{"available":""}
{"color":null}
添加更多信息(例如输入行或对象编号)也很有意义,例如也许:
with_entries(select(.value |.==null or . == ""))
| select(length>0)
| {n: input_line_number} + .