Назад | Перейти на главную страницу

jq не может индексировать ошибки

Я пытаюсь использовать jq для получения определенной информации с этой конечной точки

curl -s https://bittrex.com/api/v1.1/public/getmarketsummaries/ | jq '[.]'

и вывод ниже

[
  {
    "success": true,
    "message": "",
    "result": [
      {
        "MarketName": "BTC-1ST",
        "High": 0.00010322,
        "Low": 9.32e-05,
        "Volume": 1475820.53114847,
        "Last": 9.414e-05,
        "BaseVolume": 145.89904728,
        "TimeStamp": "2017-10-05T00:32:45.283",
        "Bid": 9.415e-05,
        "Ask": 9.521e-05,
        "OpenBuyOrders": 614,
        "OpenSellOrders": 5887,
        "PrevDay": 0.00010169,
        "Created": "2017-06-06T01:22:35.727"
      },
      {
        "MarketName": "BTC-2GIVE",
        "High": 1.31e-06,
        "Low": 1.24e-06,
        "Volume": 4356547.69360079,
        "Last": 1.29e-06,
        "BaseVolume": 5.59000303,
        "TimeStamp": "2017-10-05T00:21:46.333",
        "Bid": 1.29e-06,
        "Ask": 1.31e-06,
        "OpenBuyOrders": 298,
        "OpenSellOrders": 2290,
        "PrevDay": 1.29e-06,
        "Created": "2016-05-16T06:44:15.287"
      },
      {
        "MarketName": "BTC-ABY",
        "High": 1.89e-06,
        "Low": 1.62e-06,
        "Volume": 31422008.3611497,
        "Last": 1.68e-06,
        "BaseVolume": 53.99330434,
        "TimeStamp": "2017-10-05T00:25:21.307",
        "Bid": 1.68e-06,
        "Ask": 1.7e-06,
        "OpenBuyOrders": 437,
        "OpenSellOrders": 4761,
        "PrevDay": 1.63e-06,
        "Created": "2014-10-31T01:43:25.743"
      }

Когда я пытаюсь получить только MarketName

curl -s https://bittrex.com/api/v1.1/public/getmarketsummaries/ | jq '.[] | select(.MarketName=="BTC-1ST")'

я получаю следующую ошибку

jq: error (at <stdin>:0): Cannot index boolean with string "MarketName"

Прочие ошибки

curl -s https://bittrex.com/api/v1.1/public/getmarketsummaries/ | jq '.[1]'

и я понял это

jq: error (at <stdin>:0): Cannot index object with number

Кто-нибудь знает правильную команду, чтобы их получить?

Если вы хотите все в {} что соответствует этому marketName, вы можете сделать

$ curl -s https://bittrex.com/api/v1.1/public/getmarketsummaries/ | jq '.result[] | select(.MarketName=="BTC-1ST")'
{
  "MarketName": "BTC-1ST",
  "High": 0.00010322,
  "Low": 8.402e-05,
  "Volume": 1820113.98502106,
  "Last": 8.799e-05,
  "BaseVolume": 175.00575508,
  "TimeStamp": "2017-10-05T03:40:26.463",
  "Bid": 8.799e-05,
  "Ask": 8.817e-05,
  "OpenBuyOrders": 329,
  "OpenSellOrders": 6316,
  "PrevDay": 0.00010101,
  "Created": "2017-06-06T01:22:35.727"
}

Если вы хотите перечислить все MarketNames, вы можете сделать

$ curl -s https://bittrex.com/api/v1.1/public/getmarketsummaries/ | jq '.result[].MarketName'
"BTC-1ST"
"BTC-2GIVE"
"BTC-ABY"
....

Также необходимо программировать landuages, списки начинаются с 0 .. поэтому, если я хочу получить первый элемент в списке в jq, я могу сделать

jq '.[0]'

В списке всего 1 элемент, поэтому вы получите сообщение об ошибке, если используете [1]