无法在字符串内过滤值

时间:2019-05-03 11:38:15

标签: json syntax-error jq

我需要解析以下格式的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 个答案:

答案 0 :(得分:2)

我认为您只需要执行以下操作。如果您的data[]数组包含多个条目,请在[..]部分中指定索引。就您而言,以下过滤器与在0

中将索引指定为[..]相同
jq '.data[].wifi_score.client_score_avg' file.json

答案 1 :(得分:0)

这是基于步行路径Unix工具的JSON jtc 的替代解决方案:

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

-它会以递归方式找到标签为client_score_avg的条目

PS>披露:我是jtc工具的创建者