首页 > 解决方案 > 使用 jq 检查 package.json 中是否存在“builds”部分

问题描述

我需要编写一个 shell 脚本来检查 package.jsonNPM 项目文件中是否存在构建密钥。为此,我正在has使用jq; 但得到误报。如果不熟悉package.json,我打算在 JSON 文件中查找键的存在,但键本身就是一个 JSON 对象(我的意思是嵌套的)。

下面是使用的脚本。

if [ $(./jq 'has(".scripts.build")' package.json) == "true" ];
then
        echo "Has a build section"
else
        echo "No build section"
fi

这个脚本总是命中else代码的一部分。你能指出哪里出错了。

标签: jsonnpmjqnpm-scripts

解决方案


最好将退出代码与-e开关一起用于此类条件。此外,您正在尝试检查对象中是否存在键,并且它可能没有".scripts.build"属性。它不会像你想象的那样检查那条路径。如果要使用,请先深入到对象has/1

if ./jq -e '.scripts | has("build")' package.json > /dev/null; then
    echo "Has a build section"
else
    echo "No build section"
fi

推荐阅读