Оболочка: печатать только необходимый текст из возвращенного запроса CURL - PullRequest
0 голосов
/ 29 апреля 2020

Это код:

#!/bin/bash
for i in $(cat singers.txt);
do
  for j in $(cat songs.txt);
  do
    output=$(curl -d "singer=$i&song=$j" https://company_api.com/...)
    echo -e $output | tee -a out.txt
  done
done

Это распечатывает:

{"code": "success", "data": {"singer": "John Lennon", "song": "Imagine"}}
{"code": "success", "data": {"singer": "Beatles", "song": "Yesterday"}}

Я только хочу распечатать:

"singer": "John Lennon"
"singer": "Beatles"

Как мне сделать что?

1 Ответ

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

Обычно вы будете использовать 'jq' для извлечения данных. Однако запрашиваемый формат вывода недопустим JSON, поэтому необходима дополнительная фильтрация.

Если вы просто хотите получить певца для каждого элемента:

    output=$(curl -d "singer=$i&song=$j" https://company_api.com/... | jq .data.singer)
    echo -e '"singer:" ' $output

С результатом

"singer:" "John Lennon"
"singer:" "Beatles"

Если у вас есть гибкость в выводе, рассмотрите возможность замены output = ... и echo на

curl -d "singer=$i&song=$j" https://company_api.com/... | jq '{ singer: .data.singer }'

С результатом, формирующим действительный документ JSON :

{
  "singer": "John Lennon"
}
{
  "singer": "Beatles"
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...