gpt4 book ai didi

json - 需要创建一个解码器,从父级别的数据中创建一个记录并将其附加到 elm 中的所有子记录

转载 作者:行者123 更新时间:2023-12-05 00:52:31 26 4
gpt4 key购买 nike

我有一个这样的json:

{
"username": "john",
"email": "john@gmail.com",
"items": [
{
"id": "id 1"
},
{
"id": "id 2"
}
]
}

我需要把它解码成 List Item .项目是这样的记录。
type alias Item =
{ id : String
, user : User
}

type alias User =
{ username : String
, email : String
}

我想从 json 的顶级提取用户名和电子邮件。然后创建一个 User记录下来,然后将该用户放入每个 Item记录在 List Item .

我知道可以通过使用 Decode.andThen 来完成。 ,但不能让它工作。

对于解码,我使用 json-decode-pipeline .

谢谢

最佳答案

你当然可以用 andThen 做到这一点.这是使用标准 JSON 解码的示例(不需要 json-decode-pipeline)。

首先让我们创建一个用户解码器。这是非常直接的:

userDecoder : Decoder User
userDecoder =
map2 User
(field "username" string)
(field "email" string)

现在,让我们创建一个 Item 解码器,但让我们将其创建为一个函数,该函数接受我们可以放置在 user 上的 User 值。 field 。一分钟后你就会明白为什么:

itemDecoder : User -> Decoder Item
itemDecoder user =
map2 Item
(field "id" string)
(succeed user)

现在我们可以创建顶级项目解码器。您将首先解码用户,然后在构建列表时将其传递给 itemDecoder:

itemsDecoder : Decoder (List Item)
itemsDecoder =
userDecoder
|> andThen (\user ->
field "items" (list (itemDecoder user)))

这可以写得更简洁一点:

itemsDecoder : Decoder (List Item)
itemsDecoder =
userDecoder
|> andThen (field "items" << list << itemDecoder)

Here is a working example on ellie-app.com .

关于json - 需要创建一个解码器,从父级别的数据中创建一个记录并将其附加到 elm 中的所有子记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42554479/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com