【发布时间】:2017-09-26 00:56:10
【问题描述】:
给定以下类型:
type alias Wrapper =
{ data : Data }
type alias Data =
{ name : String }
还有以下 JSON:
{"data": {"name": "Keith"}}
如何编写一个解码器,让我可以将 HTTP 响应转换为 Wrapper 类型别名的实例?
我使用核心库 Json.Decode.Pipeline 和 Json.Decode.Extra 尝试了多种方法,但没有找到可行的解决方案。
这是我最近的尝试:
dataDecoder =
succeed Data
|> andMap (field "name" Decode.string)
wrapperDecoder =
succeed Wrapper
|> andMap (field "data" dataDecoder)
结果:
BadPayload "期望一个对象的字段名为
name,但得到的是:{\"data\":{\"name\":\"foo\"}}" { status = { code = 200, message = "OK" }, headers = Dict.fromList [("cache-control","max-age=0, private, must-revalidate"),("content-type","application/json; charset=utf- 8")], url = "http://localhost:5000//users/foo", body = "{\"data\":{\"name\":\"foo\"}}" }
编辑:
这最终成为了最终用户的问题。我正在将正确的解码器传递给Http.post,但Http.send 实际上并没有调用包装Http.post 的函数。呵呵。
【问题讨论】:
-
很高兴看到你想通了!