Не удается отфильтровать значение внутри строки - PullRequest
0 голосов
/ 03 мая 2019

Мне нужно проанализировать JSON со следующим форматом

{
  "meta": {
    "rc": "ok"
  },
  "data": [
    {
      "average_wifi_utilization": {
        "total": 21.928571428571427,
        "na": 9.035714285714286,
        "ng": 34.82142857142857
      },
      "devices_status": {
        "uap": {
          "adopted": 28,
          "connected": 28,
          "disconnected": 0,
          "pending": 0,
          "disabled": 0
        },
        "usw": {
          "adopted": 2,
          "connected": 2,
          "disconnected": 0,
          "pending": 0
        },
        "ugw": {
          "adopted": 0,
          "connected": 0,
          "disconnected": 0,
          "pending": 0
        }
      },
      "wifi_score": {
        "client_score_avg": 81,
        "clients_with_poor_score": 8,
        "clients_with_fair_score": 3,
        "clients": 99,
        "retry_rate": 0,
        "signal": -61,
        "latency": 0
      }
    }
  ]
}

Мне нужно извлечь значение из ключа "client_score_avg".

Я могу извлечь первый уровень информации с помощью:

cat file.json | jq '.data'

Однако, когда я пытаюсь сделать следующий шаг

cat file.json | jq '.data.[0]'

Я получаю сообщение об ошибке:

jq: error: syntax error, unexpected '[', expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:

Я не уверен, что делаю не так.

Ответы [ 2 ]

2 голосов
/ 03 мая 2019

Я думаю, вам просто нужно сделать ниже.Если ваш массив data[] содержит несколько записей, укажите индекс внутри части [..].В вашем случае приведенный ниже фильтр аналогичен указанию индекса как 0 внутри [..]

jq '.data[].wifi_score.client_score_avg' file.json
0 голосов
/ 03 мая 2019

Вот альтернативное решение, основанное на Unix-инструменте Walk-Path для JSON jtc:

bash $ <file.json jtc -w'<client_score_avg>l'
81
bash $ 

- он просто рекурсивно найдет запись с меткой client_score_avg

PS> Раскрытие информации: я создатель jtc инструмента

...