Добавление объекта в JSON с использованием jq, который запускается оболочкой с аргументами времени выполнения - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь вставить объекты в файл JSON, используя оболочку, которая содержит jq

Вот сценарий shell.sh

#/bin/sh!
cp -f test.json test.json.tmp
jq '.cores |= . + {"brand3": "{", "master_url": "http://master.solr.local:8983/solr/brand3", "poll_interval": "00:01:00"}' test.json.tmp >test.json
rm test.json.tmp

test.json file

 {
  "cores": {
    "brand1-nl-nl-live": {
      "master_url": "http://master.solr.local:8983/solr/brand1-nl-nl-live",
      "poll_interval": "00:01:00"
    },
    "brand2-nl-nl-live": {
      "master_url": "http://master.solr.local:8983/solr/brand2-nl-nl-live",
      "poll_interval": "00:01:00"
    },
 "brand3-nl-nl-live": "{",
    "master_url": "http://master.solr.local:8983/solr/brand3-nl-nl-live",
    "poll_interval": "00:01:00"
  }
}

Работает, но не хочет с кавычками и запятой "{",

Следующим шагом будет запуск оболочки с командой argumnts времени выполнения (./shell.sh brand3-nl-nl-live)

Пример:

#/bin/sh!

var=$1
cp -f test.json test.json.tmp
jq '.cores |= . + {"$var": "{", "master_url": "http://master.solr.local:8983/solr/$var", "poll_interval": "00:01:00"}' test.json.tmp >test.json
rm test.json.tmp

, который должен вставить объект в json

 {
  "cores": {
    "brand1-nl-nl-live": {
      "master_url": "http://master.solr.local:8983/solr/brand1-nl-nl-live",
      "poll_interval": "00:01:00"
    },
    "brand2-nl-nl-live": {
      "master_url": "http://master.solr.local:8983/solr/brand2-nl-nl-live",
      "poll_interval": "00:01:00"
    },
 "brand3-nl-nl-live": {
    "master_url": "http://master.solr.local:8983/solr/brand3-nl-nl-live",
    "poll_interval": "00:01:00"
  }
}

Ответы [ 2 ]

0 голосов
/ 22 марта 2019

как альтернативное решение, запрашиваемое также легко с jtc (которое также поддерживает модификации файлов на месте), поэтому строка в скрипте bash будет выглядеть как :

jtc -w[cores] -i'{ "brand3-nl-nl-live": { "master_url": "http://master.solr.local:8983/solr/brand3", "poll_interval": "00:01:00" } }' -f test.json

таким образом вам не нужно создавать временный файл и затем удалять его.

0 голосов
/ 21 марта 2019

Чтобы добавить аргумент в качестве ключа объекта, вы должны сделать это следующим образом:

jq --arg v $1 '.cores[$v] = { master_url: "http://master.solr.local:8983/solr/$var", poll_interval: "00:01:00"}' test.json.tmp > test.json

Поэтому измените ваш скрипт на:

#/bin/sh!

var=$1
cp -f test.json test.json.tmp
jq --arg v $1 '.cores[$v] = { master_url: "http://master.solr.local:8983/solr/$var", poll_interval: "00:01:00"}'  test.json.tmp >test.json
rm test.json.tmp

и запустите его так: ./yourscript.sh mykey

...