![对 jq 解析器感到困惑](https://linux22.com/image/1485400/%E5%AF%B9%20jq%20%E8%A7%A3%E6%9E%90%E5%99%A8%E6%84%9F%E5%88%B0%E5%9B%B0%E6%83%91.png)
我正在尝试使用jq解析器在我的 bash 脚本中,我对它的工作原理感到困惑,有人可以解释我做错了什么吗?
这是来自外部服务的原始文件,我需要value
从中获取:
root@test ~ # cat test.json
{"sensors":[{"id":34585,"value":-3.06,"time":1457031003}]}
尝试将其发送至jq
:
root@test ~ # cat narod.json | jq
{
"sensors": [
{
"id": 34585,
"value": -3.06,
"time": 1457031003
}
]
}
尝试获取sensors
:
root@test ~ # cat narod.json | jq '.sensors'
[
{
"id": 34585,
"value": -3.06,
"time": 1457031003
}
]
尝试value
从以下位置获取sensors
:
root@test ~ # cat narod.json | jq '.sensors.value'
jq: error (at <stdin>:0): Cannot index array with string "value"
答案1
正如评论中所讨论的,在这种特定情况下,您应该使用:
jq sensors[].value
这是因为您需要告知jq
期望一个数组(用 表示[
]
)。实际上,这表示“在层次结构的下一级进行搜索”。
一般来说,当您[
在 json 文件中遇到数组()时,您应该在查询中提供它:jq array_name[].object_in_array
将返回的内容object_in_array
。