首页 > 解决方案 > jq 打印版本号是否为依赖项或开发依赖项

问题描述

最近遇到了 jq 库,https: //stedolan.github.io/jq/它有望解决我面临的问题。给定一个包名称,我希望能够打印它的 devdependency 或依赖关系,并打印该行以便我获得版本号。

如果我输入“拆分”:

预期输出:

依赖项,“拆分”:“0.3.0”。

示例包.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'包含({“拆分”})'

标签: jsonbashjqpackage.json

解决方案


这是一个简单的(如果相当行人)解决方案:

.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))\""

推荐阅读