我正在尝试将 Golang 教程 gddit 移植到 Elixir。我已经使用 Dartlang 成功做到了这一点,但 Elixir 在地图和列表上的操作让我感到困惑。
使用 HTTPoison 和 JSEX,我有以下代码:
defmodule Redditex do
use HTTPoison.Base
def process_url(url) do
"http://www.reddit.com/r/#{url}.json"
end
def process_response_body(body) do
json = JSEX.decode! body
json = Enum.map json, fn ({k, v}) -> {String.to_atom(k), v } end
json
end
end
我的困难是将 JSON 主体解析为适当的结构,其中 JSON 包含嵌套数据。 Jazz 有一些映射到结构的暗示,但没有提及嵌套数据。
在 Elixir 中是否有类似于 Go 用法的示例或常见做法来解码 JSON:
type Response struct {
Data struct {
Children []struct {
Data Item
}
}
}
type Item struct {
Title string
URL string
Comments int `json:"num_comments"` #mapping to another field label
}
使用 Poison JSON 库,我能够部分地处理嵌套:
def handle_response(%{status_code: 200, body: body}) do
json = Poison.decode!(body, as: %{"data" => %{"children" => [%{"data" => Redditex.Item}]}})
items = Enum.map( json["data"]["children"], fn (x) -> x["data"] end )
end
需要进行枚举来删除匿名结构,并且字段名称的重新映射尚未显示为本机解决方案。尽管如此,仍有一条前进的工作道路。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)