Jq

Jq — 將嵌套的 json 轉換為 csv

  • April 29, 2021

我有如下範例 JSON

{
 "data": [
   {
     "name": "city",
     "LIST": {
       "ID": [
         {
           "value": "ny",
           "name": "US"
         },
         {
           "value": "lon",
           "name": "GB"
         },
         {
           "value": "Toronto",
           "name": "CA"
         }
       ]
     }
   },
   {
     "name": "city1"
   }
 ]
}

我要獲得如下價值

city,ny

city1,

我只想要 name=“US” in 的值jq

數組的每個元素最多有 1 name= “US” 。data如果沒有name= “US”,那麼我希望它為空白或 NULL。在上面的例子中,如果第二條記錄沒有name= “US” 那麼輸出將是city1,blankor city1,

假設每個data元素在其數組中最多有一個元素等於:.LIST.ID``name``US

jq -r <file '.data[] |
 [ .name, (.LIST.ID[] | select(.name == "US").value)? // null ] |
 @csv'

它能做什麼:

  1. 返回(保留)data數組的所有元素;

  2. 對於 的每個元素data,創建一個由以下組成的二元素數組(CSV 格式化所需):

  3. 每個元素的name屬性值;data

  4. 數組value元素的屬性值,如果有,則等於(如果沒有;您可以使用代替在 CSV 輸出中獲取雙引號欄位來代替完全空的欄位);括號後的表達式確保即使or元素完全失去也不會發生錯誤;.LIST.ID``name``US``null``""``null``?``.LIST``.ID

  5. 將生成的數組列表呈現為 CSV 數據。

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