将JQ FormData对象压缩为编码参数字符串

时间:2017-04-05 14:52:20

标签: bash sh jq

我想使用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过滤器来创建实现这个? 感谢您的帮助或见解:)

1 个答案:

答案 0 :(得分:3)

您可以在地图中使用格式字符串和转义以及字符串插值(jq手册中的两个部分标题),然后是reduce:

#if DEBUG