gpt4 book ai didi

json - Elm:使用 elm-decode-pipeline 解码嵌套的对象数组

转载 作者:行者123 更新时间:2023-12-04 10:05:15 26 4
gpt4 key购买 nike

我正在努力使用 NoRedInk/elm-decode-pipeline 从 OpenWeatherMap 转换 JSON 响应。我已经成功解码了 JSON 中的嵌套对象,但我无法对一组对象执行相同的操作

我已经包含了我目前拥有的代码。它编译但在使用 FetchWeather Err BadPayload ... 运行时失败

JSON

{
"weather":[{"id":804}],
"main":{"temp":289.5},
}

代码

type alias OpenWeatherResponse =
{ main: MainResult
, weather: WeatherResult
}

type alias MainResult =
{ temp: Float }

type alias ConditionResult =
{ code: Int }

decodeOpenWeatherResponse : Decoder OpenWeatherResponse
decodeOpenWeatherResponse =
decode OpenWeatherResponse
|> required "main" decodeMain
|> required "weather" decodeConditions

decodeMain : Decoder MainResult
decodeMain =
decode MainResult
|> required "temp" float

decodeConditions : Decoder ConditionResult
decodeConditions =
decode ConditionResult
|> required "id" int -- This is clearly wrong --

最佳答案

您可以使用 Json.Decode.list : Decoder a -> Decoder (List a)从一个项目的解析器制作一个列表的解析器。

decodeConditions : Decoder (List ConditionResult)
decodeConditions =
Json.Decode.list decodeCondition

decodeCondition : Decoder ConditionResult
decodeCondition =
decode ConditionResult
|> required "id" int

或者,您可以使它看起来像管道的一部分:
decodeConditions : Decoder (List ConditionResult)
decodeConditions=
decode ConditionResult
|> required "id" int
|> Json.Decode.list

此外,响应类型必须有一个列表:
type alias OpenWeatherResponse =
{ main : MainResult
, weather : List ConditionResult
}

编辑

如果您只想要 weather 的第一项数组,你可以使用 Json.Decode.index : Int -> Decoder a -> Decoder a :
decodeConditions : Decoder ConditionResult
decodeConditions =
decode ConditionResult
|> required "id" int
|> Json.Decode.index 0

关于json - Elm:使用 elm-decode-pipeline 解码嵌套的对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46993855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com