我试图在模板中简单地显示一些数据。但显然我错过了一步。
使用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
控制器
def index(conn, _params) do
response = ApiTest.get!("").body[:result]
render conn, "index.html", response: response
end
模板
<%= @response %>
错误是: Phoenix.HTML和模板中的列表可能只包含表示字节,二进制或其他列表的整数,得到无效条目
那么我在哪里将数据转换为可以在模板中显示的格式?
答案 0 :(得分:3)
从错误消息中,响应JSON中的result
键看起来像是包含列表的列表。如果您希望输出用于调试,则有两种常用方法可以使用Kernel.inspect
来获取iex
或Poison.encode!
中的表示形式以获取JSON表示形式:
<%= inspect(@response) %>
或
<%= Poison.encode!(@response) %>
您可能希望将整个内容包装在<pre>
标记中,以便在inspect
中获得精美的包装输出:
<pre><%= inspect(@response) %></pre>
或执行此操作+为pretty: true
添加Poison.encode!
:
<pre><%= Poison.encode!(@response, pretty: true) %></pre>