我正在使用 postgrest (后端)和 elm (前端)构建一个应用程序,现在我正忙于编写解码器。我不太明白如何解码为我的特定类型,而不是像 int 和 string 这样的基本类型解码器。
当我看一下是如何string实现的(第 73 到 75 行)时,它只是一个调用,Elm.Kernel.Json.decodeString而它又位于 elm 的 js 基础中。
我的 JSON 看起来像这样:
{ "id" : 1
, "parent_id" : 1
, "body" : "text of my body"
}
或者
{ "id" : 1
, "parent_id" : 1
, "sub_parent_id" : 2
}
是否可以将类似的内容解码为单个记录类型(Step),其中包含具有多个构造函数的自定义类型以匹配两个不同的字段(sub_parent_id和body)我的解码器看起来像这样但不编译:
import Api.Parent.Step.Types exposing ( Step, StepContent )
import Json.Decode exposing (..)
import Json.Decode.Pipeline exposing (..)
decoder : Decoder Step
decoder =
succeed Step
|> required "id" int
|> oneOf
[ field "stepContent" stepBodyDecoder
, field "stepContent" subStepDecoder
]
stepBodyDecoder : Decoder StepContent
stepBodyDecoder =
succeed StepContent
|> required "body" string
subStepDecoder : Decoder StepContent
subStepDecoder =
succeed StepContent
|> required "sub_parent_id" decoder
我的任何类型:
module Api.Parent.Step.Types exposing ( Step, StepContent )
type StepContent
= StepBody String
| SubStep Step
type alias Step =
{ id : Int
, stepContent : StepContent
}