我有以下 bash 腳本:
#!/bin/bash
js="{\"fizz\":\"buzz\",\"foo\":\"baz\"}"
echo $js
json=$(echo "$js" | jq -r "to_entries|map(\"\(.key)=\(.value|tostring)\")|.[]")
echo "fetching secret json:"
echo $json
當我運行它時,我得到了這個:
myuser@mymachine myapp % bash myscript.sh
{"fizz":"buzz","foo":"baz"}
fetching secret json:
fizz=buzz foo=baz
實際上,JSON將比僅 2 個屬性大得多,但它將是鍵值對的平面映射(無物件嵌套)。
我實際上需要逗號分隔的鍵值對中的這些映射條目。所以而不是:
fizz=buzz foo=baz
我需要:
fizz=buzz,foo=baz
我可以對我的jq過濾器(或其他地方)做些什么來在鍵值對之間插入逗號?需要明確的是,我不是在尋找有效的 JSON 輸出,也不是 CSV 格式。我需要逗號分隔的 KV 對。提前致謝!
uj5u.com熱心網友回復:
加入他們吧。
jq -r 'to_entries | map("\(.key)=\(.value)") | join(",")'
在線演示
uj5u.com熱心網友回復:
只是為了好玩,另一種說法:
jq -r '
def values: . as $obj | keys | map($obj[.]);
def pairs: [keys, values] | transpose;
pairs | map(join("=")) | join(",")
'
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/519923.html
標籤:linux重击jq
上一篇:遞回/詳盡地將點插入字串
