JQ:如何将某个文件的内容放在某个键下的另一个文件中?

时间:2019-03-21 04:50:01

标签: json jq

我要使用 jq

  • (1)读取package.jsonpeerDependencies中的键计数
  • (2)如果计数为0,请在docs.json时从sections[].name === 'prerequesite'中删除

这就是我的解决方法(1):

if [[ $(cat package.json | jq '.peerDependencies | length') = 0 ]]; then
  echo "Remove page prerequesite as no peer dependencies were found"
  # do (2)
fi

这就是我开始解决(2)的方法:

cat docs.json | jq '.sections[] | select(.name != "Prerequisite")' > newSection.json

如何将newSection.json放入文件中?

否则:

我的数组JSON如下所示:

{
    "ignore": [
      "**/__tests__/**",
      "**/*.test.{js,jsx,ts,tsx}",
      "**/*.spec.{js,jsx,ts,tsx}",
      "**/*.d.ts"
    ],
    "sections": [{
        "name": "Introduction",
        "content": "docs/introduction.md"
    }, {
        "name": "Prerequisite",
        "content": "docs/prerequisite.md"
    }]
}

我希望有

{
    "ignore": [
      "**/__tests__/**",
      "**/*.test.{js,jsx,ts,tsx}",
      "**/*.spec.{js,jsx,ts,tsx}",
      "**/*.d.ts"
    ],
    "sections": [{
        "name": "Introduction",
        "content": "docs/introduction.md"
    }]
}

在我的tmp.json文件中,我有:

如何使用命令行从数组中删除名称为prerequisite的部分?

1 个答案:

答案 0 :(得分:1)

您只需要使用select()构造从JSON结构中删除包含.name字段的对象。

if [[ $(jq '.peerDependencies | length' package.json) = 0 ]]; then
    jq '.sections |= map(select(.name != "Prerequisite"))' docs.json      
fi

然后,您可以使用> newSection.jsondocs.json的修改后的内容重定向到新文件。