2016-07-23 11 views
1

Ich versuche, einfach einige Daten in einer Vorlage anzuzeigen. Aber anscheinend vermisse ich einen Schritt.Anzeige von JSON-Daten in einer Phoenix-Vorlage

Anfrage mit HTTPoison

use HTTPoison.Base 

@expected_fields ~w(result) 

def process_url(url) do 
"url.json" 
end 

def process_response_body(body) do 
    body 
    |> Poison.decode! 
    |> Map.take(@expected_fields) 
    |> Enum.map(fn({k ,v}) -> {String.to_atom(k), v} end) 
end 

Controller

def index(conn, _params) do 
    response = ApiTest.get!("").body[:result] 
    render conn, "index.html", response: response 
end 

template

<%= @response %> 

Der Fehler ist: Listen in Phoenix.HTML und Vorlagen nur ganze Zahlen darstellen, Bytes, Binärdateien enthalten oder andere Listen, ungültiger Eintrag

Wo also transformiere ich die Daten in ein Format, das in der Vorlage angezeigt werden kann?

+0

Haben Sie eine HTML-Vorlage und wollen eine json im Körper hinzuzufügen, oder Sie eine JSON-Antwort zur Verfügung stellen möchten? – Migore

+0

Ich habe eine HTML-Vorlage und möchte Daten aus der JSON-Antwort hinzufügen. –

Antwort

2

Aus der Fehlermeldung sieht es aus wie der result Schlüssel in der Antwort JSON ist entweder eine Liste enthält eine Liste. Wenn Sie eine Ausgabe für das Debuggen möchten, zwei gemeinsame Wege sind Kernel.inspect zu verwenden, um eine Darstellung wie die bekommen in iex oder Poison.encode! eine JSON-Darstellung zu erhalten:

<%= inspect(@response) %> 

oder

<%= Poison.encode!(@response) %> 

Vielleicht möchten Sie zu wickeln Sie das ganze in <pre> Tags schön verpackt Ausgang in inspect zu erhalten:

<pre><%= inspect(@response) %></pre> 

oder tun + hinzufügen pretty: true für Poison.encode!:

<pre><%= Poison.encode!(@response, pretty: true) %></pre>