我在ELM中是全新的。我试图从响应中获取数据。
现在我正试图为此做解码器。我有这样的json:
<?php
class test {
protected $a = '';
}
$test= new test();
$test->a = 'b';
var_dump($test);
我所需要的只是获得最低价格并将其退回。 (至少返回每个价格)。
现在我堆叠在Decode.index上。
{
data: [
{
"price" = 300.5
},
{
"price" = 1005
}
]
}
下一步我该怎么做?
答案 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