2017-09-17 53 views
1

我有一个嵌套列表的类型别名,我想用Json.Decode.Pipeline解析。列表上的Json.Decode.Pipeline(elm 0.18)

import Json.Decode as Decode exposing (..) 
import Json.Encode as Encode exposing (..) 
import Json.Decode.Pipeline as Pipeline exposing (decode, required) 

type alias Student = 
    { name : String 
    , age : Int 
    } 

type alias CollegeClass = 
    { courseId : Int 
    , title : String 
    , teacher : String 
    , students : List Student 
    } 

collegeClassDecoder : Decoder CollegeClass 
collegeClassDecoder = 
    decode CollegeClass 
     |> Pipeline.required "courseId" Decode.int 
     |> Pipeline.required "title" Decode.string 
     |> Pipeline.required "teacher" Decode.string 
     |> -- what goes here? 

这是如何工作的?

回答

1

您需要将解码器传递给Decode.list。在你的情况下,它将是一个基于你的Student类型的形状的自定义的。

这还没有测试过,但是像下面应该工作:

studentDecoder = 
    decode Student 
     |> required "name" Decode.string 
     |> required "age" Decode.int 

collegeClassDecoder : Decoder CollegeClass 
collegeClassDecoder = 
    decode CollegeClass 
     |> Pipeline.required "courseId" Decode.int 
     |> Pipeline.required "title" Decode.string 
     |> Pipeline.required "teacher" Decode.string 
     |> Pipeline.required "students" (Decode.list studentDecoder) 

this职位上编写自定义标记的解码器应该是有益的。