我想使用JQ命令行将FormData json对象转换为类似id=johndoe&password=secret&foo=bar
的字符串
{
"name": "example",
"auth_url": "http://example.com/login",
"form_data": {
"id": "johndoe",
"password": "secret",
"foo": "bar"
}
}
到目前为止,我想出了这个功能,它起作用,但看起来并不优雅或优化
function form_data_to_encoded() {
local obj=$1
form_data_keys=$(echo $obj | jq '.form_data | keys')
length=$(echo $form_data_keys | jq 'length')
encoded=""
for ((i=0; i<$length; i++)); do
key=$(echo "$form_data_keys" | jq --raw-output ".[$i]")
value=$(echo "$obj" | jq --raw-output ".form_data.$key")
encoded="$encoded$key=$value"
if (( ((i+1)) < "$length" )); then
encoded="$encoded&"
fi
done
echo "$encoded"
}
有没有办法使用一个(或更少)JQ过滤器来创建实现这个? 感谢您的帮助或见解:)
答案 0 :(得分:3)
您可以在地图中使用格式字符串和转义以及字符串插值(jq手册中的两个部分标题),然后是reduce:
#if DEBUG