Elixir URI.encode_query嵌套映射

asi*_*niy 4 elixir

Elixir URI.encode_query在非嵌套地图上运行良好,例如:

URI.encode_query(%{ a: "b", c: "d" }) # => "a=b&c=d"
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试编码嵌套地图,就像

URI.encode_query(%{ a: %{ b: "c" } })
Run Code Online (Sandbox Code Playgroud)

我明白了

** (Protocol.UndefinedError) protocol String.Chars not implemented for %{b: "c"}
Run Code Online (Sandbox Code Playgroud)

我怎么能用嵌套映射编码查询呢?

Dog*_*ert 9

Elixir的URI模块不支持嵌套映射,但您可以使用支持嵌套映射的plugPlug.Conn.Query.encode/1:

iex(1)> Plug.Conn.Query.encode %{ a: "b", c: "d" }
"a=b&c=d"
iex(2)> Plug.Conn.Query.encode %{ a: %{ b: "c" } }
"a[b]=c"
Run Code Online (Sandbox Code Playgroud)