执行HTTP帖子后收到以下错误:
无法获得财产标记'未定义或空引用
我认为执行以下解码器功能时会发生错误:
sourceDecoder : Decoder JsonSource
sourceDecoder =
Decode.map5 JsonSource
...
(field "Links" providerLinksDecoder)
解码器依赖项:
providerLinksDecoder : Decoder JsonProviderLinks
providerLinksDecoder =
Decode.map JsonLinkFields
(field "Links" <| Decode.list (Decode.lazy (\_ -> linkDecoder)))
|> Decode.map JsonProviderLinks
linkDecoder : Decoder JsonLink
linkDecoder =
Decode.map6 JsonLink
(field "Profile" profileDecoder)
...
profileDecoder : Decoder JsonProfile
profileDecoder =
Decode.map7 JsonProfile
...
(field "Sources" <| Decode.list (Decode.lazy (\_ -> sourceDecoder)))
附录
type JsonProviderLinks
= JsonProviderLinks JsonLinkFields
type alias JsonLinkFields =
{ links : List JsonLink
}
源代码可以在here找到。
注意:我尝试研究此错误并遇到此page。 结果,我试图使用Decode.lazy函数。但是,我的尝试失败了。
答案 0 :(得分:2)
在您的示例中,有很多依赖于其他解码器的解码器。您已将其中一些更改为使用Decode.lazy
,但不是全部,并且当您发生某些失控递归时,您收到的错误将会发生。
您不需要列表才能使用lazy
。尝试 - 作为调试的第一步,至少 - 更改引用其他解码器的所有解码器以使用Decode.lazy
。例如:
sourceDecoder : Decoder JsonSource
sourceDecoder =
Decode.map5 JsonSource
...
(field "Links" (Decode.lazy (\_ -> providerLinksDecoder)))