使用JQ获取输出



我有以下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

相关内容

  • 没有找到相关文章

最新更新