dados POST json com cURL de um loop while - shell bash

1

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
    
por rSh 21.03.2016 / 19:43

3 respostas

1

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
    
por 22.03.2016 / 00:27
0

Veja um exemplo, usando apenas awk :

#!/bin/bash

for id in $(awk '/"id":/ {sub(/,/, ""); print $2}' inputfile.json); do
    curl -X POST ...
done
    
por 21.03.2016 / 21:03
0

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
    
por 21.03.2016 / 22:22

Tags