Фильтровать пустые и / или нулевые значения с помощью jq - PullRequest
1 голос
/ 20 июня 2019

У меня есть файл с jsonlines, и я хотел бы найти пустые значения.

{"name": "Color TV", "price": "1200", "available": ""}
{"name": "DVD player", "price": "200", "color": null}

И хотел бы вывести пустые и / или нулевые значения и их ключи:

available: ""
color: null

Я думаю, что это должно быть что-то вроде cat myexample | jq '. | selec(. == "")', но не работает.

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Сложная задача - испускать ключи без кавычек так, чтобы пустая строка отображалась в кавычках.Вот одно решение, которое работает с параметром командной строки jq -r:

to_entries[]
| select(.value | . == null or . == "")
| if .value == "" then .value |= "\"\(.)\"" else . end
| "\(.key): \(.value)"

Как только заданный ввод был изменен очевидным способом, чтобы сделать его действительным JSON, вывод будет точно таким, как указано.

0 голосов
/ 20 июня 2019

Приведенный ниже фрагмент создает массив из ключей объекта с помощью Object.keys (). Затем он зацикливается на этом массиве и проверяет каждый ключ на null || пустой строки. Он создает объект keyName: value и помещает его в массив emptyKeys, а затем, когда это будет сделано, регистрирует их на консоли.

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);
...