Bash: хотите использовать библиотеку jq для вставки поля в существующий файл json, содержащий массив объекта json - PullRequest
0 голосов
/ 17 апреля 2020

Я новичок в bash Сценарии исходных данных

$jq_linux64 -n '.Data.Info = []' > input.json

позже я вставляю данные как показано ниже

для этого я написал здесь $ {3} является вводом. json

cat ${3} | $jq_linux64 --arg tranID "${1}" \
                       --arg architectureType "${2}" \
           '.Data.Info += [{"tranID": ($tranID),"architecture": ($architecture)}]'\ >tmp.json && mv tmp.json ${3}

, который будет генерировать следующие

{
  "Data": {
    "Info": [
      {
        "tranID": "1",
        "architecture": "thread_1"
      }
    ]
  }
}

Теперь я хочу написать различные функции (которые будут вызываться из других bash скриптов "для вставки данных в объект LAST JSON массив

insertbuildinfo()
{

}

, который должен изменить вышеуказанный input.jason, например

{
  "Data": {
    "Info": [
      {
        "tranID": "1",
        "architecture": "thread_1",
        "build": "yes"
      }
    ]
  }
}

, снова следующая функция вставит поле "win" с введенным значением. json

nextfunc()
{
}


{
  "Data": {
    "Info": [
      {
        "tranID": "1",
        "architecture": "thread_1",
        "build": "yes",
        "win": "qaw"
      }
    ]
  }
}

final JSON должно быть

{
  "Data": {
    "Info": [
      {
        "tranID": "1",
        "architecture": "thread_1",
        "build": "yes",
        "win": "qaw"
      },
      {
        "tranID": "2",
        "architecture": "thread_2",
        "build": "yes",
        "win": "qaw"
      },
      {
        "tranID": "3",
        "architecture": "thread_3",
        "build": "yes",
        "win": "qaw"
      }
    ]
  }
}

требуется вставить новое поле в последний объект массива

Пожалуйста, помогите мне в написании функций jq, так как я совершенно новичок в этой топи c любая помощь приветствуется.

1 Ответ

0 голосов
/ 17 апреля 2020

Вы, кажется, понимаете некоторые jq. Вставить поле в последний элемент массива просто:

jq '.Data.Info[-1] += { "build": "yes" }'
...