【发布时间】:2021-07-02 21:31:11
【问题描述】:
我有以下来自 curl 输出的 JSON,我需要从中检索 IP 地址。我尝试了以下 jq 查询,但出现以下错误。我尝试了其他几种方法,但没有运气
curl -sH "X-Requested-By: ambari" -u admin:admin -i http://${AMBARI_IP}:8080/api/v1/hosts?fields=Hosts/host_name,Hosts/ip | jq '.[] | {.items.Hosts.ip}'
jq: error: syntax error, unexpected FIELD (Unix shell quoting issues?) at <top-level>, line 1:
.[] | {.items.Hosts.ip}
jq: 1 compile error
(23) Failed writing body
下面是 curl 的输出
HTTP/1.1 200 OK
Date: Fri, 02 Jul 2021 21:04:27 GMT
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
Cache-Control: no-store
Pragma: no-cache
Set-Cookie: AMBARISESSIONID=123344.node0;Path=/;HttpOnly
Expires: Thu, 01 Jan 1970 00:00:00 GMT
User: admin
Content-Type: text/plain;charset=utf-8
X-Content-Type-Options: nosniff
Vary: Accept-Encoding, User-Agent
Transfer-Encoding: chunked
{
"href" : "http://10.0.0.33:8080/api/v1/hosts?fields=Hosts/host_name,Hosts/ip",
"items" : [
{
"href" : "http://10.0.0.33:8080/api/v1/hosts/sil.dev.test.com",
"Hosts" : {
"host_name" : "test123.sil.dev.test.com",
"ip" : "10.135.3.119"
}
},
{
"href" : "http://10.0.0.33:8080/api/v1/hosts/test001.sil.dev.test.com",
"Hosts" : {
"cluster_name" : "test_cluster",
"host_name" : "test001.sil.dev.test.com",
"ip" : "10.0.0.33"
}
},
{
"href" : "http://10.0.0.33:8080/api/v1/hosts/test002.sil.dev.test.com",
"Hosts" : {
"cluster_name" : "test_cluster",
"host_name" : "test002.sil.dev.test.com",
"ip" : "10.0.0.34"
}
},
{
"href" : "http://10.0.0.33:8080/api/v1/hosts/test003.sil.dev.test.com",
"Hosts" : {
"cluster_name" : "test_cluster",
"host_name" : "test003.sil.dev.test.com",
"ip" : "10.0.0.35"
}
},
}
【问题讨论】:
-
.[] |的预期用途是什么?如果您要返回列表,那将是有道理的;当顶级项目是一个对象时,就没有那么多了。 -
@CharlesDuffy:
.[]可用于任何复合实体。等等! -
,@peak,当然可以,但我不确定在这种情况下它是否明智;在迭代对象的情况下,您正在丢弃数据(我忘记了它是否迭代键或值,并且不太倾向于查找它 - 恕我直言,不一起处理键和值基本上是不正确的一对)。