2016-12-13 4 views
1

json array이 포함 된 json을 디코드해야합니다. elm. 여기 내 모델 :elm : 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)을 알고하지 않았다

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

. 감사 –