Я пытаюсь выполнить вызов curl в своем сценарии оболочки, где я хочу передать результат sql в данных.
taleResult = `isql -S$envServer -U$USERNAME -h -b << ENDSQL | grep -vE "^Password: $"
$PASSWORD
set nocount on
GO
USE db_cfg
GO
SELECT tablename from MyTable
GO
ENDSQL`
Результат таблицы выглядит как TableA TableB TableC
liveCalculators=()
if echo "$tableResult"; then
for line in $tableResult
do
MessageLog "Table is $line"
liveCalculators+=(\"$line\")
done
endif
Предположим, что у меня есть результат, сохраненный в массиве как liveCalculators
curl_response=` curl_response=`curl -k -X POST "https://myapiurl" \
-H "accept: */*" \
-H "Content-Type: application/json" \
-w ";%{http_code}" \
-d "@/dev/stdin" <<EOF
{ "keys": [],, "calcs": ${liveCalculators[@]}}
EOF`
`
Я получаю Bad Request как ошибку
Подскажите, что можно сделать, чтобы исправить.
Так :
myFlatArr=$(printf '%s\n' "${liveCalculators[@]}" | paste -sd',')
curl -k -X POST "https://myapiurl" \
-H "accept: */*" \
-H "Content-Type: application/json" \
-w ";%{http_code}" \
-d "@/dev/stdin" <<EOF
{ "keys": [], "calcs": [ $myFlatArr ] }
EOF
Это не сработало на самом деле
Можете ли вы отредактировать свой исходный пост, чтобы показать нам, что такое массив bash?
Предыдущий тоже работал. Большое спасибо
Выходные данные вашего массива не инкапсулированы как действительный JSON, так как насчет этого:
curl_response=$(curl -k -X POST "https://myapiurl" -H "accept: */*" -H "Content-Type: application/json" -d "{ \"keys\": [], \"calcs\": \"${liveCalculators[@]}\" }" -w ";%{http_code}")
Кроме того, вывод массива liveCalculators
представляет собой список BASH, и вам может потребоваться выполнить некоторый синтаксический анализ и выполнить поиск/замену, чтобы преобразовать его в действительный список JSON.
Если у вас установлен jq
, попробуйте следующее:
curl_response = "$(curl -k -X POST "https://myapiurl"\
-H "accept: */*"\
-H "Content-Type: application/json"\
-w ";%{http_code}"\
-d "$(jq -cn '{"keys": [], "calcs": $ARGS.positional}' --args "${liveCalculators[@]}")"
)"
Я пробовал curl_response=
curl -k -X POST "https://myaoiurl" \ -H "accept: */*" \ -H "Content-Type: application/json" \ -w ";%{http_code}" \ -d "@/dev/stdin" <<EOF { "keys": [], "calcs": ${liveCalculators[@]}} EOF