剛開始玩jq,我一生都無法接受我應該如何以更清潔的方式處理這個問題。我有一些來自 AWS SSM Parameter Store 的資料,我以 JSON 形式收到,我想處理這些資料。
資料結構如下
[
{
"Name": "/path/to/key_value",
"Value": "foo"
},
{
"Name": "/path/to/key_value_2",
"Value": "bar"
},
...
]
我希望它以下列方式輸出:key_value=foo key_value_2=bar. 我的第一個想法是按如下方式處理它:map([.Name | split("/") | last, .Value] | join("=")) | join(" ")但隨后我收到以下錯誤:jq: error (at <stdin>:9): Cannot index array with string "Value". 就好像在傳遞引數的Value值之后對值的參考丟失了Name。
當然我可以像這樣解決它,但這只是丑陋的:map([.Value, .Name | split("/") | last] | reverse | join("=")) | join(" "). 如何在Name不丟失參考的情況下處理 的值Value?
編輯: JQ 播放鏈接
uj5u.com熱心網友回復:
map((.Name | split("/") | last) "=" .Value) | join(" ")
將輸出:
"key_value=foo key_value_2=bar"
在線演示
“訣竅”是將其包裹起來,.Name | split("/") | last)以便()保持.value可用
如果您更喜歡字串插值( \()) 而不是(key) .Value,則可以將其重寫為:
map("\(.Name | split("/") | last)=\(.Value)") | join(" ")
在線演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/507721.html
