我尝试使用相同的HTTPoison调用进行API调用,该调用返回多个项目或单个项目。对多个项目的响应将它们投入到"项目"属性,而单个项只返回项信息作为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}?key=API_KEY"
end
end
def process_response_body(body) do
body
|> Poison.decode!(as: %{"items" => [%Item{}]})
|> Map.fetch!("items")
end
在process_response_body中,如何检查JSON响应中的items属性,如果它不存在,请以不同方式处理它?</ p>
答案 0 :(得分:2)
我只是解码结果并编写一个多头函数将它打包到你的对象中。类似的东西:
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