jq打印是否是版本号的依赖项或devdependency

时间:2019-02-10 17:27:05

标签: json bash jq package.json

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

如果我输入“ 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'contains({“ split”})'

1 个答案:

答案 0 :(得分:2)

这是一个简单的解决方案:

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