У меня есть несколько bash-переменных, которые я хочу преобразовать в JSON с очень специфическим форматом.У меня проблемы с передачей их в качестве аргументов jq и почесать голову, как потом перебрать 2 массива внутри самого jq.Может быть, мне следует сначала вручную перенести два массива как JSON, а затем передать этот JSON в jq через --argjson
?
Вот что я написал до сих пор.
#!/usr/bin/env bash
#example data
_assetPair=BTCUSD
_version=0.9.1
_median=103.96
_medianHex="000000000000000000000000000000000000000000000005a2bc1d32419c0000"
_time=1549524531
_timeHex="000000000000000000000000000000000000000000000000000000005c5bde33"
_hash="db035aa02562167d23f657bb6f1030ba962d476f18a51c5c651b6b4b0"
_signature="51cd021f3c3edf1600aafaa81e366cd14543125dd7ec4c1da91765b0e632cfd313a3b8a291153262531e7027163ffe1239ddc9cc42815ddfcf70404a6cb5f2d71b"
#the size of the two below arrays is always equal but not known ahead of time
#unsure how to pass/use these in jq
#if I pass in the elements I won't know which handle to call them with in jq
#maybe need some transpose magic here
validSources=()
validPrices=()
validSources+=( "Bitfinex" "Poloniex" "Coinbase" )
validPrices+=( "104.61" "102.88" "103.96")
#Create jq input argument list
_jqArgs=()
_jqArgs=( "--arg assetPair $_assetPair" "--arg version $_version" "--arg median $_median" "--arg median0x $_medianHex" "--arg time $_time" "--arg time0x $_timeHex" "--arg hash ${_hash:2}" "--arg signature ${_signature:2}" )
for index in ${!validSources[*]}; do
_jqArgs+=( --arg "${validSources[index]}" "${validPrices[index]}" )
done
#sanity check
echo "${_jqArgs[@]}"
#generate json
jq -n "${_jqArgs[@]}" '{assetPair: $assetPair, version: $version, median: $median | tonumber, medianHex: $medianHex, time: $time | tonumber, timeHex: $timeHex, hash: $hash, signature: $signature}'
Когда язапустите приведенный выше скрипт, вот вывод ошибок, которые я получаю.
bash-5.0$ ./test.sh
--arg assetPair BTCUSD --arg version 0.9.1 --arg median 103.96 --arg median0x 000000000000000000000000000000000000000000000005a2bc1d32419c0000 --arg time 1549524531 --arg time0x 000000000000000000000000000000000000000000000000000000005c5bde33 --arg hash 035aa02562167d23f657bb6f1030ba962d476f18a51c5c651b6b4b0 --arg signature cd021f3c3edf1600aafaa81e366cd14543125dd7ec4c1da91765b0e632cfd313a3b8a291153262531e7027163ffe1239ddc9cc42815ddfcf70404a6cb5f2d71b --arg Bitfinex 104.61 --arg Poloniex 102.88 --arg Coinbase 103.96
jq: Unknown option --arg assetPair BTCUSD
Я пытался добавить экранированные двойные кавычки вокруг BTCUSD при назначении его assetPair в jqArgs, но это вернуло ту же ошибку.
Я ожидаю вывод, как это:
{
"assetPair": "BTCUSD",
"version": "0.9.1",
"median": 103.96,
"medianHex: "000000000000000000000000000000000000000000000005a2bc1d32419c0000",
"time": 1549524531,
"timeHex": "000000000000000000000000000000000000000000000000000000005c5bde33",
"hash": "db035aa02562167d23f657bb6f1030ba962d476f18a51c5c651b6b4b0",
"signature": "51cd021f3c3edf1600aafaa81e366cd14543125dd7ec4c1da91765b0e632cfd313a3b8a291153262531e7027163ffe1239ddc9cc42815ddfcf70404a6cb5f2d71b",
"sources": {
"Bitfinex": "104.61",
"Coinbase: "103.96",
"Poloniex": "102.88"
}
}