榆树:解码包含 json 数组的 json

elm: decode json that contains a json array

所以我需要解码 json,其中包含 elm 中的 json array。这是我的模型:

type alias ValidationResult =
    { parameter : String
    , errorMessage : String
    }


type alias ErrorResponse =
    { validationErrors : List ValidationResult }

下面是 json 的示例:

{"ValidationErrors": [{"Parameter": "param1","ErrorMessage": "message 1"},{"Parameter": "param2","ErrorMessage": "error message 2"}]}

我尝试创建一个 ValidationResult 解码器,例如:

decodeValidationResults : Decoder ValidationResult
decodeValidationResults =
  map2 ValidationResult
    (at [ "Parameter" ] Json.Decode.string)
    (at [ "ErrorMessage" ] Json.Decode.string)

但我不知道如何进行下一步。

我正在使用 elm 0.18

你快到了!您只需要一个解码 ErrorResponse 类型的解码器。为此,创建另一个使用您已经创建的解码器列表的解码器,假设字段名称是 "ValidationErrors":

import Json.Decode exposing (..)

decodeErrorResponse : Decoder ErrorResponse
decodeErrorResponse =
    map ErrorResponse
        (field "ValidationErrors" (list decodeValidationResults))

一点建议:当只有一个级别时,您可以使用 Json.Decode.field 而不是 Json.Decode.at。您可以将 decodeValidationResults 重写为:

decodeValidationResults : Decoder ValidationResult
decodeValidationResults =
  map2 ValidationResult
    (field "Parameter" string)
    (field "ErrorMessage" string)