Json

儲存在變數中的 json 中鍵的 grep/列印值

  • May 15, 2021

我有一個帶有嵌套 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

我正在使用grepjq我無法顯示價值,它顯示“日期”(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

引用自:https://unix.stackexchange.com/questions/597368