递归解码嵌套列表(任意深度的列表的列表)

问题描述 投票:0回答:1

考虑这个递归类型定义:

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 ]
    ]
json nested-lists elm
1个回答
0
投票

可以使用

Decode.lazy
递归完成。 嵌套整数列表的解码器如下所示:

nestedListDecoder : Decoder (NestedList Int)
nestedListDecoder =
    Decode.oneOf
        [ Decode.int |> Decode.map Elem
        , Decode.list (Decode.lazy (\_ -> nestedListDecoder)) |> Decode.map SubList
        ]
© www.soinside.com 2019 - 2024. All rights reserved.