Elixir 处理HTTPoison调用时的Case语句
我尝试对返回多个项目或单个项目的API调用使用相同的HTTPoison调用。对多个项的响应将它们抛出到“items”属性中,而单个项仅返回作为JSON字符串的项信息 这是我的密码:Elixir 处理HTTPoison调用时的Case语句,elixir,phoenix-framework,elixir-poison,Elixir,Phoenix Framework,Elixir Poison,我尝试对返回多个项目或单个项目的API调用使用相同的HTTPoison调用。对多个项的响应将它们抛出到“items”属性中,而单个项仅返回作为JSON字符串的项信息 这是我的密码: def process_url(method, id \\ 0) do if id > 0 do "http://api.call.com/#{method}/#{id}?key=API_KEY" else "http://api.call.com/#{method}
def process_url(method, id \\ 0) do
if id > 0 do
"http://api.call.com/#{method}/#{id}?key=API_KEY"
else
"http://api.call.com/#{method}?key=API_KEY"
end
end
def process_response_body(body) do
body
|> Poison.decode!(as: %{"items" => [%Item{}]})
|> Map.fetch!("items")
end
在process\u response\u body中,如何让它检查JSON响应中的items属性,如果它不存在,则以不同的方式处理它?我只需解码结果并编写一个多头函数将其打包到对象中。比如:
def process_response_body(body) do
body
|> Poison.decode!
|> unpack
end
def unpack(%{"items" => items}) do
Enum.map(items, &struct(Item, &1))
end
def unpack(%{"item" => item}), do: struct(Item, item)
或与案例一起:
body
|> Poison.decode!
|> case do
%{"items" => items} -> Enum.map(items, &struct(Item, &1))
%{"item" => item} -> struct(Item, item)
end
我明白了,谢谢!我要试一试。对长生不老药来说还是新鲜事。