簡體   English   中英

使用 jq 將 json 鍵和值解析為 CSV

[英]Using jq to parse json key and value to CSV

我是jq的新手,很高興使用它。 我試圖用 python 實現的目標是可能的,但目的是學習jq 。我試圖用 curl 命令處理 JSON。

以下是我的curl命令的響應

{
    "results": [{
            "name": "smith Jones",
            "DOB": "1992-03-26",
            "Enrollmentdate": "2013-08-24"

        },

        {
            "name": "Jacob Mathew",
            "DOB": "1993-03-26",
            "Enrollmentdate": "2014-10-02"
        },

        {
            "name": "Anita Rodrigues",
            "DOB": "1994-03-26",
            "Enrollmentdate": "2015-02-19"
        }
    ]
}

我能夠在某種程度上獲得所需的輸出。 但我無法在輸出中打印密鑰本身。 當我將此 csv 文件 (file.csv) 導出到 excel 時,我需要此信息以便稍后將其用作列的標題。 我打算編寫一個 bash 腳本來實現 csv 到 excel。

<curl-command>|jq '.results | map(.name), map(.DOB), map(.Enrollmentdate) | @csv' >file.csv

我能夠得到如下輸出

smith jones, jacob Mathew, Anita Rodrigues
1992-03-26,  1993-03-26,  1994-03-26
2013-08-24,  2014-10-02,  2015-02-19 

我想要實現的目標如下

name:smith jones, name:jacob Mathew, name:Anita Rodrigues
DOB:1992-03-26,  DOB:1993-03-26,  DOB:1994-03-26
Enrollmentdate:2013-08-24,  Enrollmentdate:2014-10-02, Enrollmentdate:2015-02-19
  1. 由於您需要鍵名及其值,然后調整您的方法,您可以將以下內容與 -r 命令行選項結合使用來生成 CSV:
    .results
    | map(to_entries[] | select(.key=="name")),
      map(to_entries[] | select(.key=="DOB")),
      map(to_entries[] | select(.key=="Enrollmentdate"))
    | map("\(.key):\(.value)" )
    | @csv`
  1. 如果你想要 CSV,那么堅持上面的; 如果您確信永遠不需要引用字符串, @csv更改為join(", ") 如果您只想在不需要時刪除引號,您可以為簡單的過濾器添加一個 def 來做到這一點。

  2. to_entries的重復to_entries 您可能需要考慮如何避免它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM