2016-12-13 3 views
1

Так что мне нужно декодировать json, который содержит json array в elm. Вот моя модель:elm: decode json, который содержит массив json

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

ответ

1

Вы почти там! Вам просто нужен декодер, который декодирует тип 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) 
+0

Я знал, что это должно быть что-то подобное, но я не знал о (список decodeValidationResults). благодаря –