提问人:Robert Lisaru 提问时间:9/24/2023 最后编辑:Robert Lisaru 更新时间:9/24/2023 访问量:54
以递归方式解码嵌套列表(具有任意深度的列表列表)
Decoding a nested list (list of lists with arbitrary depth) recursively
问:
请考虑以下递归类型定义:
type NestedList a
= Elem a
| SubList (List (NestedList a))
如何编写解码器以将 JSON 列表(例如)解码为以下类型:[1, [[2, [3, 4]], 5], 6, [7, 8, 9]]
NestedList
SubList
[ Elem 1
, SubList [ SubList [ Elem 2, SubList [ Elem 3, Elem 4 ] ], Elem 5 ]
, Elem 6
, SubList [ Elem 7, Elem 8, Elem 9 ]
]
答:
2赞
Robert Lisaru
9/24/2023
#1
它可以递归地完成,使用 和 .
整数嵌套列表的解码器如下所示:Json.Decode.oneOf
Json.Decode.lazy
import Json.Decode as Decode exposing (Decoder)
nestedListDecoder : Decoder (NestedList Int)
nestedListDecoder =
Decode.oneOf
[ Decode.int |> Decode.map Elem
, Decode.list (Decode.lazy (\_ -> nestedListDecoder)) |> Decode.map SubList
]
评论