我正在json使用以下格式從 a 中提取密鑰:
[
{
"k1":{"k2":4},
"k3":{"k2":6}
}
]
[
{
"k1":{"k2":4},
"k3":{"k2":6}
}
]
我正在使用此命令["a","b"], (.[] | [.k1.k2,.k3.k2]) | @csv提取兩個鍵并向csv添加兩個標頭 ( a, )。b但是這個的輸出是每隔一行的一個標題:
"\"a\",\"b\""
"4,6"
"\"a\",\"b\""
"4,6"
你可以在這個jq play中看到這一點。如何更改過濾器以僅將標題放在第一行?
uj5u.com熱心網友回復:
由于您的 json 中有流,因此您需要inputs而不是.[]
jq -nr '(["a","b"], (inputs | map(.k1.k2,.k3.k2))) | @csv' input-json
uj5u.com熱心網友回復:
您的輸入是 JSON 檔案流。因此,您的過濾器會為每個檔案執行一次,包括構建標題。
一種解決方案是使用--slurpor-s選項將流作為陣列讀取。但是,這將需要在您的迭代中更深入一層(.[][]而不是僅僅.[]):
jq -s '["a","b"], (.[][] | [.k1.k2,.k3.k2]) | @csv'
演示
另一種方法是使用inputs它一次為您提供所有輸入檔案。然而,這將需要遍歷那個 (input[]而不是.[]) 并使用--null-inputor-n標志來避免吞噬第一個元素:
jq -n '["a","b"], (inputs[] | [.k1.k2,.k3.k2]) | @csv'
演示
注意:在生成輸出時,您可能還想使用--raw-outputor-r標志來生成原始文本而不是 JSON @csv(正如我在演示中所做的那樣)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/423416.html
標籤:
上一篇:N天后從組中洗掉用戶
