Limpar Bash citando com JSON

1

Eu já examinei questões semelhantes antes, mas não exatamente respondo ao meu problema.

Estou usando o cURL para enviar uma solicitação JSON, assim:

curl -X POST  -H "Content-Type:application/json" "$HOST" -d '{"uri": "'"$URI"'", "identityKeyValue":"'"'date +%s'"'", "identityKeyType": "bar", "status": "'$STATUS'", "statusDetail": "'"$STATUS_DETAIL"'", "exclusionKeys": [], "monitoredEntity": {"name": "foobar"}, "timestamp":'"'date +%s'"', "metadata": {} }'

Funciona, mas é muito feio (estou falando sobre a parte depois de -d ), mas não consegui encontrar algo melhor que cumprisse o seguinte:

  1. Suporta substituição de variável (como $STATUS )
  2. Substituição do comando de suporte (como 'date +%s' )

Como é o JSON, obviamente precisa de muito doublequotes ( " )

O comando não precisa ser uma linha. Quero legibilidade & clareza em vez de olhar confuso / hacky. O que você sugere?

    
por kolistivra 29.06.2015 / 17:29

1 resposta

1

divida-o em várias etapas e use um modelo printf :

fmt='{"uri": "%s", "identityKeyValue":"%s", "identityKeyType": "bar", "status": "%s", "statusDetail": "%s", "exclusionKeys": [], "monitoredEntity": {"name": "foobar"}, "timestamp":%d, "metadata": {}}'
time=$(date +%s)
data=$(printf "$fmt" "$URI" $time "$STATUS" "$STATUS_DETAIL" $time)
curl -X POST  -H "Content-Type:application/json" "$HOST" -d "$data"

Além disso, saia do hábito de usar ALL_CAPS_VARNAMES: um dia, você acidentalmente usará o PATH e, em seguida, perguntará por que seu programa quebrou.

    
por 29.06.2015 / 17:35