榆树:解码包含 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)
所以我需要解码 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)