Elm用数组解码json对象



我在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))

最新更新