Shell脚本将json对象分配给变量进行迭代


DATA="$(curl "https://www.alphavantage.co/query?function=SYMBOL_SEARCH&keywords=BA&apikey=demo" | jq '.bestMatches' | jq '.[] | ."1. symbol"')"

我想迭代DATA变量,理想情况下它是一个数组。我想在这里做的是双重的。

  1. 我需要一种方法来选择";1.符号";所有具有"0"的记录的属性;matchScore";大于0.5。这对我来说是一件有问题的事情,因为matchScore包含一个字符串,而不是一个数字
  2. 我想把所选的";1.符号";属性,稍后我可以对其进行迭代以执行更多操作
{
"bestMatches": [
{
"1. symbol": "BA",
"2. name": "The Boeing Company",
"3. type": "Equity",
"4. region": "United States",
"5. marketOpen": "09:30",
"6. marketClose": "16:00",
"7. timezone": "UTC-05",
"8. currency": "USD",
"9. matchScore": "1.0000"
},
{
"1. symbol": "BAC",
"2. name": "Bank of America Corporation",
"3. type": "Equity",
"4. region": "United States",
"5. marketOpen": "09:30",
"6. marketClose": "16:00",
"7. timezone": "UTC-05",
"8. currency": "USD",
"9. matchScore": "0.8000"
},
{
"1. symbol": "BABA",
"2. name": "Alibaba Group Holding Limited",
"3. type": "Equity",
"4. region": "United States",
"5. marketOpen": "09:30",
"6. marketClose": "16:00",
"7. timezone": "UTC-05",
"8. currency": "USD",
"9. matchScore": "0.6667"
},
{
"1. symbol": "GOLD",
"2. name": "Barrick Gold Corporation",
"3. type": "Equity",
"4. region": "United States",
"5. marketOpen": "09:30",
"6. marketClose": "16:00",
"7. timezone": "UTC-05",
"8. currency": "USD",
"9. matchScore": "0.5714"
},
{
"1. symbol": "BIDU",
"2. name": "Baidu Inc.",
"3. type": "Equity",
"4. region": "United States",
"5. marketOpen": "09:30",
"6. marketClose": "16:00",
"7. timezone": "UTC-05",
"8. currency": "USD",
"9. matchScore": "0.5000"
},
{
"1. symbol": "BAYRY",
"2. name": "Bayer Aktiengesellschaft",
"3. type": "Equity",
"4. region": "United States",
"5. marketOpen": "09:30",
"6. marketClose": "16:00",
"7. timezone": "UTC-05",
"8. currency": "USD",
"9. matchScore": "0.4000"
},
{
"1. symbol": "BLDP",
"2. name": "Ballard Power Systems Inc.",
"3. type": "Equity",
"4. region": "United States",
"5. marketOpen": "09:30",
"6. marketClose": "16:00",
"7. timezone": "UTC-05",
"8. currency": "USD",
"9. matchScore": "0.3333"
},
{
"1. symbol": "BHC",
"2. name": "Bausch Health Companies Inc.",
"3. type": "Equity",
"4. region": "United States",
"5. marketOpen": "09:30",
"6. marketClose": "16:00",
"7. timezone": "UTC-05",
"8. currency": "USD",
"9. matchScore": "0.3333"
},
{
"1. symbol": "BK",
"2. name": "The Bank of New York Mellon Corporation",
"3. type": "Equity",
"4. region": "United States",
"5. marketOpen": "09:30",
"6. marketClose": "16:00",
"7. timezone": "UTC-05",
"8. currency": "USD",
"9. matchScore": "0.1538"
}
]
}

上面是我得到的json对象。

将字段值从整数转换为带tonumber的数字,因此:

readarray data <<< "$(jq -r '.bestMatches[] | select(."9. matchScore" | tonumber > 0.5) | ."1. symbol"' jq)"

将jq命令的输出重定向到readarray以创建一个数组。

最新更新