Elm 如何将JSON解码为数据构造函数生成的记录?

Elm 如何将JSON解码为数据构造函数生成的记录?,elm,Elm,有一种类型 输入用户 =匿名 |命名{name:String,email:String} Json.Decode.object2不适合这里,因为它的第一个参数类型是(a->b->c),但是命名的有{email:String,name:String}->User类型 如何向用户解码?由于您的命名的构造函数将记录作为参数,因此为名称和电子邮件记录创建类型别名可能会更简洁一些 键入别名NamedUserInfo= {name:String ,电邮:String } 然后,您可以重新定义User以使

有一种类型

输入用户
=匿名
|命名{name:String,email:String}
Json.Decode.object2
不适合这里,因为它的第一个参数类型是
(a->b->c)
,但是
命名的
{email:String,name:String}->User
类型


如何向用户解码?

由于您的
命名的
构造函数将记录作为参数,因此为名称和电子邮件记录创建类型别名可能会更简洁一些

键入别名NamedUserInfo=
{name:String
,电邮:String
}
然后,您可以重新定义
User
以使用别名:

输入用户
=匿名
|命名为NamedUserInfo
虽然上述内容并不是绝对必要的,但我发现别名记录类型在很多方面都很有用。这里它很有用,因为它为我们提供了一个构造函数
NamedUserInfo
,让我们能够清楚地定义解码器:

import Json.Decode公开(…)
NamedUserInfo解码器:解码器NamedUserInfo
名称译码器=
反对意见2
纳梅杜塞林福
(“名称”:=字符串)
(“电子邮件”:=字符串)
最后,您的用户解码器可以这样构造:

userDecoder:解码器用户
用户解码器=
其中之一
[零匿名]
,object1命名为namedUserInfo解码器
]
您可以通过以下快速测试运行示例:

exampleJson=
"""
[{“user”:null},{“user”:{“name”:“johndoe”,“email”:“j。doe@mailg.com"}}]
"""
主要=

text由于您的
命名的
构造函数将记录作为参数,因此为名称和电子邮件记录创建类型别名可能会更简洁一些

键入别名NamedUserInfo=
{name:String
,电邮:String
}
然后,您可以重新定义
User
以使用别名:

输入用户
=匿名
|命名为NamedUserInfo
虽然上述内容并不是绝对必要的,但我发现别名记录类型在很多方面都很有用。这里它很有用,因为它为我们提供了一个构造函数
NamedUserInfo
,让我们能够清楚地定义解码器:

import Json.Decode公开(…)
NamedUserInfo解码器:解码器NamedUserInfo
名称译码器=
反对意见2
纳梅杜塞林福
(“名称”:=字符串)
(“电子邮件”:=字符串)
最后,您的用户解码器可以这样构造:

userDecoder:解码器用户
用户解码器=
其中之一
[零匿名]
,object1命名为namedUserInfo解码器
]
您可以通过以下快速测试运行示例:

exampleJson=
"""
[{“user”:null},{“user”:{“name”:“johndoe”,“email”:“j。doe@mailg.com"}}]
"""
主要=

text另一种方法是定义一个函数,该函数接受名称和电子邮件,并返回您的
命名的
构造函数:

userDecoder:解码器用户
用户解码器=
让
命名=
反对意见2
(\n e->Named{name=n,email=e})
(“名称”:=字符串)
(“电子邮件”:=字符串)
在里面
[null匿名,已命名]

另一种方法是定义一个函数,该函数接受名称和电子邮件,并返回名为的
构造函数:

userDecoder:解码器用户
用户解码器=
让
命名=
反对意见2
(\n e->Named{name=n,email=e})
(“名称”:=字符串)
(“电子邮件”:=字符串)
在里面
[null匿名,已命名]

您能提供代表匿名和命名用户的json示例吗?
[{“user”:null},{“user”:{“name”:“John Doe”,“email”:“j。doe@mailg.com“}}]
您能提供代表匿名和命名用户的json示例吗?
[{“user”:null},{“user”:{“name”:“John Doe”,“email”:“j。doe@mailg.com"}}]
谢谢您的完整回答。我猜这是不可能的。我会重新考虑我的模型,尽量不使用数据构造函数的记录。谢谢你的完整答案。我猜这是不可能的。我会重新考虑我的模型,尽量不使用数据构造函数的记录。