JQ: Как поместить содержимое файла в другой файл под определенным ключом? - PullRequest
1 голос
/ 21 марта 2019

Используя jq , я хочу

  • (1) прочитать количество ключей в package.json в peerDependencies
  • (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 Ответ

1 голос
/ 21 марта 2019

Вам просто нужно использовать конструкцию select(), чтобы удалить объект, содержащий поле .name, из структуры JSON.

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

Затем можно использовать > newSection.json, чтобы перенаправить измененное содержимое docs.json в новый файл.

...