2017-01-24 4 views
2

OK, völlig ratlos auf diesem und die Docs haben nicht viel. Ich möchte eine verschachtelte Liste wie folgt kodieren:URL Encoding-Listen in Elixir

URI.encode_query(%{group: %{names: ["first", "second", "third", "fourth"]}}) 

Grundsätzlich ist diese Struktur eine Gruppe ist, die die Eigenschaft von Namen hat, die eine Liste ist. Ich erhalte diesen Fehler: (Protocol.UndefinedError) protocol String.Chars not implemented for %{names: ["first", "second", "third", "fourth"]}

Ich habe keine Bibliothek gefunden, die so etwas in Elixir tut.

Ich weiß, dass die Dokumente sagen, dass Sie keine Listen mit dem String.Chars-Protokoll verwenden können, aber ich verstehe nicht, wie Sie diese Datenstruktur dann erstellen können.

TLDR

möchte ich eine Liste als Zeichenkette in einer URL. In Ruby zum Beispiel würde ich

names: ["first", "second", "third", "fourth"]

Ideen auf, dies zu erreichen in Elixir schreiben?

Ok, also gibt es keine Möglichkeit und Sie müssen es manuell tun.

Referenz: https://elixirforum.com/t/uri-encode-query-1-and-lists/2492

Antwort

6

Das URI Modul basiert auf Standards - kein Standard im Einsatz definiert, wie verschachtelte Parameter kodieren.

Es gibt jedoch einige Konventionen um diese und eine von ihnen wird von der plug Bibliothek implementiert.

iex> query = %{group: %{names: ["first", "second", "third", "fourth"]}} 
iex> Plug.Conn.Query.encode(query) 
"group[names][]=first&group[names][]=second&group[names][]=third&group[names][]=fourth" 
+0

Perfekt - danke! – user3162553