1

Я смотрел на подобные вопросы раньше, но точно не отвечаю на мою проблему.

Я использую cURL для отправки запроса JSON, вот так:

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": {} }'

Это работает, но это очень некрасиво (я говорю о части после -d), но я не мог найти что-то лучшее, встречая следующее:

  1. Поддерживает подстановку переменных (например, $STATUS)
  2. Поддержка подстановки команд (например, `date +%s`)

Поскольку это JSON, ему, очевидно, нужно много двойных кавычек (")

Команда не должна быть одной строкой. Я хочу читабельности и ясности, а не этот грязный / хакерский взгляд. Что ты предлагаешь?

1 ответ1

1

разбейте его на несколько этапов и используйте шаблон 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"

Кроме того, избавьтесь от привычки использовать ALL_CAPS_VARNAMES: однажды вы случайно будете использовать PATH, а затем удивляетесь, почему ваша программа сломалась.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .