我有以下JSON OUTP
{
"environment": {
"reg": "abc"
},
"system": {
"svcs": {
"upsvcs": [
{
"name": "monitor",
"tags": [],
"vmnts": [],
"label": "upsvcs",
"credentials": {
"Date": "Feb152018",
"time": "1330"
}
},
{
"name": "application",
"tags": [],
"vmnts": [],
"label": "upsvcs",
"credentials": {
"lastViewed": "2018-02-07"
}
}
]
}
}
并检索日期值(从凭据(。我尝试了`curl xxx |JQ -R'。|选择(.date('
没有返回任何值。有人可以让我知道正确的语法和有关如何检索元素的任何解释(或任何这样做的文章(。
tia
(或至少a(简短答案是:
.system.svcs.upsvcs[0].credentials.Date
没有模式,正确获取确切的路径通常有点棘手,因此您可能需要考虑使用JQ Filter paths
。在您的情况下:
$ jq -c paths input.json | grep Date
["system","svcs","upsvcs",0,"credentials","Date"]
您也可以直接使用此路径(即上述数组(:
$ jq 'getpath(["system","svcs","upsvcs",0,"credentials","Date"])' input.json
"Feb152018"
因此,您可以使用"无路径"查询:
$ jq --argjson p $(jq -c paths input.json | grep --max 1 Date) 'getpath($p)' input.json
"Feb152018"
另一种方法只是检索所有"真实" .Date
值,无论它们出现在哪里:
$ jq -c '.. | .Date? // empty' input.json
"Feb152018"
选择
由于您提到了select
,请注意:
$ jq -c '.. | select(.Date?)' input.json
{"Date":"Feb152018","time":"1330"}
更多信息
有关一般有关JQ的更多信息,尤其是检索主题,请参见在线教程,手册和FAQ:
- https://stedolan.github.io/jq/tutorial/
- https://stedolan.github.io/jq/manual/v1.5/
- https://github.com/stedolan/jq/wiki/faq