Se você tem uma saída em um arquivo chamado tmp.json, use jq para obter a lista de IDs, um por linha e então, com um simples loop for, faça um post na sua api
for i in 'cat tmp.json | jq .glossary[].id'; do
curl -X POST http://host/api/$i"
done
Eu tenho uma saída JSON da qual preciso extrair uma ID e iterar através deles e enviar várias solicitações à API REST de execução da API com curl. Por exemplo:
É assim que a saída JSON se parece:
{
"glossary": [
{
"Title": "example glossary1",
"id": 1,
"description": "Hello Glossary1"
},
{
"Title": "example glossary2",
"id": 2,
"description": "Hello Glossary2"
},
{
"Title": "example glossary3",
"id": 3,
"description": "Hello Glossary3"
},
{
"Title": "example glossary4",
"id": 4,
"description": "Hello Glossary4"
}
]
}
O script de shell deve percorrer este arquivo JSON, extrair o ID e executar o loop e executar as chamadas da API REST com o CURL.
Aqui está o exemplo:
for (( i = 0 ; i < ${#id[@]} ; i++ ))
do
POST REST API
done
Se você tem uma saída em um arquivo chamado tmp.json, use jq para obter a lista de IDs, um por linha e então, com um simples loop for, faça um post na sua api
for i in 'cat tmp.json | jq .glossary[].id'; do
curl -X POST http://host/api/$i"
done
Veja um exemplo, usando apenas awk :
#!/bin/bash
for id in $(awk '/"id":/ {sub(/,/, ""); print $2}' inputfile.json); do
curl -X POST ...
done
Sem awk até IDs de 3 dígitos. Basta enviar seu resultado JSON por STDIN e ler com um loop while:
digits=0;
while read line
do
foo='echo $line|grep id|cut -c 7-$((7+digits))'
if [[ ! $foo -eq '' ]]
then
echo "curl http://webaddress/api?id=$foo"
if [[ '$foo' == '9' ]] || [[ '$foo' == '99' ]]
then
digits=$((digits+1))
fi
fi
done<your-json-output.json