我很难用NoRedInk/elm-decode管道从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 --发布于 2017-10-28 20:21:01
您可以使用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 0https://stackoverflow.com/questions/46993855
复制相似问题