2
ソースコードelmplaygroundで試してみたいと思います。ブログ用の設定jsonファイルを作成しようとしています。私がこの時点で抱えている問題は、ポスト/ページの著者をどのようにネストされた構造としてデコードできるか分かりません。私が望むのは、投稿とページのauthor
フィールドがconfig.json
の著者への参照を行うということです。ネストされたJSON構造のデコード
config.json:ページと投稿のため
{
"posts": [{
"slug": "/hello-world",
"title": "Hello World",
"name": "hello-world",
"publishedDate": "2016-10-30",
"author": "Gabriel",
"intro": ""
}],
"pages": [{
"slug": "/hello",
"name": "index",
"title": "Elm Playground",
"publishedDate": "2016-09-01",
"author": "Gabriel",
"intro": ""
}],
"authors": {
"Gabriel": {
"name": "Gabriel Perales",
"avatar": "..."
}
}
}
型コンテンツ:
type alias Content =
{ title : String
, name : String
, slug : String
, publishedDate : Date
, author : Author
, markdown : WebData String
, contentType : ContentType
, intro : String
}
種別著者:
type alias Author =
{ name : String
, avatar : String
}
現在、これが私のconfigデコーダである:
configDecoder : Decoder Config
configDecoder =
Decode.map2 Config
(field "posts" <| Decode.list <| decodeContent Post)
(field "pages" <| Decode.list <| decodeContent Page)
decodeContent : ContentType -> Decoder Content
decodeContent contentType =
Decode.map8 Content
(field "slug" string)
(field "name" string)
(field "title" string)
(field "publishedDate" decodeDate)
(field "author"
(string
-- I want to decode the author from "authors"
-- I have tried with
-- (\name -> at ["authors", name] decodeCofigAuthor) but it doesn\'t work
|> andThen (\name -> Decode.succeed <| Author name "...")
)
)
(Decode.succeed RemoteData.NotAsked)
(Decode.succeed contentType)
(field "intro" string)
decodeConfigAuthor : Decoder Author
decodeConfigAuthor =
Decode.map2 Author
(field "name" string)
(field "avatar" string)
私はそれを試してみるつもりですが、私が探していたもののように見えます – gabrielperales