jq вывести, если это зависимость или зависимость от номера версии - PullRequest
0 голосов
/ 10 февраля 2019

Недавно наткнулся на библиотеку jq, https://stedolan.github.io/jq/, которая обещает решить проблему, с которой я столкнулся.Учитывая имя пакета, я хочу иметь возможность печатать, если его зависимость или зависимость, а также печатать строку, чтобы я получил номер версии.

Если я введу «split»:

Ожидаемый результат:

зависимости, "split": "0.3.0".

sample package.json

{
    "name": "universe",
    "devDependencies":
    {
        "escape-html": "^1.0.3",
        "lucene-query-parser": "^1.0.1"
    },
    "dependencies":
    {
        "async": "^0.2.10",
        "npm2es": "~0.4.2",
        "optimist": "~0.6.0",
        "request": "~2.30.0",
        "skateboard": "^1.5.1",
        "split": "0.3.0",
        "weld": "^0.2.2"
    }

}

Имея ограниченный опыт работы с библиотекой jq, я могу получить истинное или ложное значение для зависимости / devDependency, но мне нужно получить ожидаемый выше результат.Все, что приближает меня к ожидаемому выводу, тоже подойдет.

Это мой запрос:

jq -c '{dependencies: .dependencies, devDependencies: .devDependencies}'package.json |JQ. [] |jq 'содержит ({"split"})'

1 Ответ

0 голосов
/ 10 февраля 2019

Вот одно простое (если довольно пешеходное) решение:

.devDependencies[$name] as $v
| if $v then "devDependencies, \"\($name)\": \"\($v)\""
  else .dependencies[$name] as $v
  | if $v then "dependencies, \"\($name)\": \"\($v)\"" else empty end
  end

Вызов

jq --arg name split -r -f program.jq input.json

Более экономично

{devDependencies,dependencies}
| map_values(.[$name])
| to_entries[]
| select(.value)
| "\(.key), \"\($name)\": \"\(.value)"

Более обобщенно

(paths | select( .[-1] == $name )) as $p
| "\($p[-2]), \"\($name)\": \"\(getpath($p))\""
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...