Json
儲存在變數中的 json 中鍵的 grep/列印值
我有一個帶有嵌套 json 的變數,
a={ "version": "3.0", "user": "unknown_unknown", "dateGenerated": "2020-07-08T11:53:23Z", "status": "OK", "data": [ { "parameter": "t_2m:C", "coordinates": [ { "lat": 39.23054, "lon": 9.11917, "dates": [ { "date": "2020-07-08T15:53:23Z", "value": 25.1 } ] } ] } ] }
尋找一種方法來 grep 變數中嵌套 json 中的“值”(如突出顯示的那個)
a
。我正在使用
grep
但jq
我無法顯示價值,它顯示“日期”(echo $result | grep -Po '"dates":.*?[^\\],.*?[^\\]"'
)但不僅僅是價值。有什麼幫助嗎?
您想要來自(“日期”數組中的第一個對象)的“值”來自(“座標”數組中的第一個對象)來自(“數據”數組中的第一個對象)
$ a='{"version":"3.0","user":"unknown_unknown","dateGenerated":"2020-07-08T11:53:23Z","status":"OK","data":[{"parameter":"t_2m:C","coordinates":[{"lat":39.23054,"lon":9.11917,"dates":[{"date":"2020-07-08T15:53:23Z","value":25.1}]}]}]}' $ echo "$a" | jq -r '.data[0].coordinates[0].dates[0].value' 25.1
您可能還需要考慮安裝
gron
,這是一個“使 JSON 可被 greppable!”的實用程序。在
a
你的問題中定義,echo $a | gron
返回
json.data = []; json.data[0] = {}; json.data[0].coordinates = []; json.data[0].coordinates[0] = {}; json.data[0].coordinates[0].dates = []; json.data[0].coordinates[0].dates[0] = {}; json.data[0].coordinates[0].dates[0].date = "2020-07-08T15:53:23Z"; json.data[0].coordinates[0].dates[0].value = 25.1; json.data[0].coordinates[0].lat = 39.23054; json.data[0].coordinates[0].lon = 9.11917; json.data[0].parameter = "t_2m:C"; json.dateGenerated = "2020-07-08T11:53:23Z"; json.status = "OK"; json.user = "unknown_unknown"; json.version = "3.0";
這確實使處理變得容易:
$ echo $a | gron | sed -n '/value/{s/.* //; s/;//; p;}' 25.1 $ echo $a | gron | awk '/value/ {sub(/;/,""); print $NF;}' 25.1