Elm用数组解码json对象

时间:2018-11-06 14:06:24

标签: json elm

我在ELM中是全新的。我试图从响应中获取数据。

现在我正试图为此做解码器。我有这样的json:

<?php
class test {
    protected $a = '';
}
$test= new test();
$test->a = 'b';
var_dump($test);

我所需要的只是获得最低价格并将其退回。 (至少返回每个价格)。

现在我堆叠在Decode.index上。

{
  data: [
        {
            "price" = 300.5
        },
        {
            "price" = 1005
        }
    ]
}

下一步我该怎么做?

1 个答案:

答案 0 :(得分:2)

问题本身存在几个问题。首先,您没有发布所收到的错误。我得到的错误是这样的:

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转换为{{1 }}。我会假设类型是错误的。

因此,您(或至少我)遇到的错误是说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