将嵌套的json解码并压平成Elm记录

San*_*thi 7 elm

我刚刚开始学习榆树,我遇到了障碍.寻找这个令人敬畏的社区的一些帮助.

我正在寻找一个嵌套的json解码并将一个特定的嵌套值拉入一个elm记录.

json源看起来像这样:

 {
    "id": 672761,
    "modified": "2018-02-12T00:53:04",
    "slug": "Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.",
    "type": "post",
    "link": "https://awesomelinkhere.com",
    "title": {
        "rendered": "Sed posuere consectetur est at lobortis."
    },
    "content": {
        "rendered": "Nulla vitae elit libero, a pharetra augue.",
    },
    "excerpt": {
        "rendered": "Donec sed odio dui.",
    }
}
Run Code Online (Sandbox Code Playgroud)

我想拉开title.renderedcontent.rendered成在我的模型现场,模型看起来像这样:

type alias Post =
    { id : Int
    , published : String
    , title : String
    , link : String
    , slug : String
    , excerpt : String
    }
Run Code Online (Sandbox Code Playgroud)

我天真的解码器看起来像这样

postDecoder : Decoder Post
postDecoder =
    Decode.map6 Post
        (field "id" Decode.int)
        (field "modified" Decode.string)
        (field "title" Decode.string)
        (field "link" Decode.string)
        (field "slug" Decode.string)
        (field "excerpt" Decode.string)
Run Code Online (Sandbox Code Playgroud)

San*_*thi 7

更新

通常情况下,我一发布这个就找到了答案.我查看了Json.Decode文档并偶然发现了该at函数

我的工作解码器现在看起来像这样

postDecoder : Decoder Post
postDecoder =
    Decode.map6 Post
        (field "id" Decode.int)
        (field "modified" Decode.string)
        (at [ "title", "rendered" ] Decode.string)
        (field "link" Decode.string)
        (field "slug" Decode.string)
        (at [ "excerpt", "rendered" ] Decode.string)
Run Code Online (Sandbox Code Playgroud)