我有此函数可解码JSON
type alias Item =
{ title : String
, description : String
, price : Float
, imageUrl : String
}
itemDecoder : Json.Decode.Decoder Item
itemDecoder =
D.map4 ItemData
(D.field "title" D.string)
(D.field "description" D.string)
(D.field "price" D.float)
(D.field "imageUrl" D.string)
decodeItem : Json.Decode.Value -> Item
decodeItem =
Json.Decode.decodeValue itemDecoder
我从编译器中得到的错误是,decodeItem产生了
Json.Decode.Value -> Result Json.Decode.Error Item
代替
Json.Decode.Value -> Item
我如何用decodeItem
包装Result.withDefault
的输出,以便它产生有效的项目或返回空的Item
。空的Item
将是Result.withDefault
的第一个参数。
答案 0 :(得分:4)
鉴于您有一个返回空Item
的函数,例如emptyItem
,则只需要执行已描述的步骤即可:
Result.withDefault
Item
将是Result.withDefault
的第一个参数结果:
decodeItem : D.Value -> Item
decodeItem value =
Result.withDefault emptyItem (D.decodeValue itemDecoder value)
emptyItem
可以是返回具有默认值的Item
记录的函数,例如:
emptyItem : Item
emptyItem = Item "" "" 0 ""
或者一些合理的默认设置,对您来说很有意义