Получить значение из элемента на основе другого значения в jshon - PullRequest
0 голосов
/ 30 марта 2020

У меня есть JSON объект, структурированный как:

[{"pid":0, "name":"server", "status":"online"},
{"pid":1, "name":"server2", "status":"stopped"}]

Из командной строки я хочу вернуть значение status из элемента, чей name является "сервером" ( позиция меняется, поэтому ее нельзя вызывать только с индексом массива 0).

Я не могу использовать jq, потому что версия Node, похоже, подвержена этой проблеме в данный момент: https://www.npmjs.com/advisories/1217.

В настоящее время я пытаюсь использовать jshon, но не могу понять, как связать поиски. docs заставляет его звучать так, как будто флаг -p должен помочь, но у меня, похоже, ничего не осталось в стеке после выполнения первой части поиска. Например, я получаю ошибку stack underflow при попытке

pm2 jlist | jshon -a -e name -u -p -e status -u

, которую я ожидаю напечатать server online server2 stopped (что в любом случае не совсем то, что я хочу - в идеале я просто хочу вернуть online в зависимости от статуса server). Открыты для любых решений, jshon или других.

Ответы [ 2 ]

3 голосов
/ 30 марта 2020

Вы можете использовать в командной строке без каких-либо переплетений узлов:

$ jq -r '.[] | select(.name == "server") | .status' input.json
$ online
1 голос
/ 30 марта 2020

Если вы не возражаете против какого-то крупного хакерства и длины, вы можете написать полный скрипт узла, чтобы сделать это для вас.

pm2 jlist | node -e 'tot="";process.stdin.on("data",function(d){tot+=d.toString("utf8");});process.stdin.on("end",function(){dat=JSON.parse(tot);console.log(dat.find(v => v.name == "server").status)})'
...