свернуть объект json как данные POST из файла массива json, используя цикл jq - PullRequest
0 голосов
/ 22 мая 2018

Вот мой пример файла test.json

[
    {
        "description": "Some description",
        "name": "Some name",
        "summary": "Some summary. "
    },
    {
        "description": "Some description",
        "name": "Some name",
        "summary": "Some summary. "
    },
    {
        "description": "Some description",
        "name": "Some name",
        "summary": "Some summary. "
    }
]

Вот скрипт bash

declare -A values=( )
while IFS= read -r value; do
  echo "Read  $value" >&2
  #echo $value | curl -d @- -H "Content-Type: application/json" https://example.com/api/foo
done < <(jq -r '.[]' <$1)

Это вывод, который я получаю

Read {
Read    "description": "Some description",
Read    "name": "Some name",
Read    "summary": "Some summary. "
Read }
Read {
Read    "description": "Some description",
Read    "name": "Some name",
Read    "summary": "Some summary. "
Read }
Read {
Read    "description": "Some description",
Read    "name": "Some name",
Read    "summary": "Some summary. "
Read }

Я хочу использовать объекты JSON в файле, чтобы отправить данные в API, используя curl.Я ожидал бы, что цикл будет выполняться три раза.

Как получить весь объект JSON (в результате цикл будет выполняться 3 раза) вместо вывода каждой отдельной строки из файла test.json?

1 Ответ

0 голосов
/ 22 мая 2018

Используйте jq -c, чтобы выдать каждый результат в отдельной строке. Не используйте -r, если вы хотите использовать JSON, а не необработанную строку.

Я также добавил ниже несколько цитат, которых не было в вашем коде:

# for readability, factored out
args=( -d @- -H "Content-Type: application/json"  )

while IFS= read -r value; do
  echo "Read  $value" >&2
  curl "${args[@]}" https://example.com/api/foo <<<"$value"
done < <(jq -c '.[]' <"$1")
...