所以,如果你正在尋找不需要Json.Decode.Pipeline
零依賴的解決方案。
import Json.Decode as Decode exposing (Decoder)
modelDecoder : Decoder Model
modelDecoder =
Decode.map3 Model
(Decode.field "id" Decode.int)
(Decode.field "name" Decode.string)
(Decode.maybe <| Decode.field "desc" Decode.string)
如果你想這樣做,使用Model
構造爲適用函子(因爲你需要更多的8個項目)。
import Json.Decode as Decode
import Json.Decode.Extra as Decode exposing ((|:))
modelDecoder : Decoder Model
modelDecoder =
Decode.succeed Model
|: Decode.field "id" Decode.int
|: Decode.field "name" Decode.string
|: Decode.maybe (Decode.field "desc" Decode.string)
兩者都可以與List
s內使用Decode.list modelDecoder
。我希望應用函數在標準庫中,但您必須涉及所有* -extra庫以獲取這些功能。瞭解應用函數的工作方式將幫助您更好地理解線條,因此我建議閱讀它們。 Decode Pipeline解決方案將這個簡單的概念抽象出來,但是當您遇到需要Result.andMap
或任何其他andMap
時,因爲您的模塊或DSL沒有mapN
,您將知道如何獲得解決方案。
張貼我的問題後,進一步Google搜索引導我到Brian Hicks的JSON解碼器的帖子。當我回來時,我很高興看到你的回答。很高興能找到一個好的來源,這對其他人也有幫助。 –
在你的最後一行中,我認爲你想''(Json.map只是字符串)''而不是'Json.map只是int)''。 –
謝謝,我用'string'和Ellie例子更新了它。希望能幫助到你! – bdukes