最近遇到了jq库https://stedolan.github.io/jq/,该库有望解决我面临的问题。给定一个包名,我希望能够打印出它的devdependency或依赖关系,并打印行以获取版本号。
如果我输入“ split”:
预期输出:
依赖关系,“拆分”:“ 0.3.0”。
{
"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”})'
答案 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))\""