我在ELM中是全新的。我正在尝试从获取响应中获取数据。
现在我正试图为它制作解码器。我有这样的json:
{
data: [
{
"price" = 300.5
},
{
"price" = 1005
}
]
}
我所需要的只是得到最低价格并退货。(至少每个价格都退货(。
现在我在Decode.index.上堆叠
priceDecoder : Decode.Decoder String
priceDecoder =
Decode.field "data" Decode.list
我下一步该怎么办?
问题本身有几个问题。首先,你没有发布你得到的错误。我得到的错误是:
The 2nd argument to `field` is not what I expect:
25| Decode.field "data" Decode.list
^^^^^^^^^^^
This `list` value is a:
Decode.Decoder a -> Decode.Decoder (List a)
But `field` needs the 2nd argument to be:
Decode.Decoder a
其次,您发布的JSON无效,data
应该用引号括起来,属性和值应该用:
而不是=
分隔。
第三,priceDecoder
的类型似乎是错误的,因为JSON不包含String
数据,或者您没有指定也要将Float
转换为String
。我认为这个类型是错误的。
因此,您(或者至少我(得到的错误表明list
是一个函数Decoder a -> Decoder (List a)
,而它只期望一个Decoder a
值。这是因为list
期望将一个Decoder a
传递给它,它将使用它来解码列表中的每个项目。
我们将使用的解码器是Decode.field "price" Decode.float
,它将把对象的"价格"字段解码为Float
。
我还将把priceDecoder
的类型从Decoder String
更改为Decoder (List Float)
,因为价格是Float
,我们正在解码其中的List
,而不仅仅是获得第一个或最后一个值或类似的东西。我想这就是你想要的,因为你说"至少退还每个价格"。
我们得到的priceDecoder
是:
priceDecoder : Decode.Decoder (List Float)
priceDecoder =
Decode.field "data" (Decode.list (Decode.field "price" Decode.float))