2016-12-20 9 views
2

ポート経由でElmアプリケーションにオブジェクトの配列を渡しています。あなたが資本を持つオブジェクトの開始にキーを見ることができるようにElmポートからJSONデコーダへのオブジェクト

{ 
    FullName: 'Foo Bar', 
    Location: 'Here' 
} 

ので、私はエルムでこれらをデコードする必要があります。配列内のオブジェクトのうちの一つの例があります。私のエルムのコードでは、私はPerson

type alias Person = 
    { fullName : String 
    , location : String 
    } 

とポートのtypeをしている:最後に、私はPerson型にデータを解析する(私はElm Decode Pipelineを使用しています)デコーダを持って

port getPeople : (List Json.Decode.Value -> msg) -> Sub msg 

peopleDecoder : Decoder Person 
peopleDecoder = 
    decode Person 
     |> required "FullName" string 
     |> required "Location" string 

私の質問は、私はPerson型に着信ポートのデータをマップしますどのようにでしょうか?私はJSでこれを行うことができることを知っているが、私はむしろElmコードでそれをやりたい。

+0

あなたの例の 'peopleDecoder'では'Worker'とは何ですか? –

+0

これは誤植で、今修正されました。 – joshuahornby10

答えて

4

Json.Decode.decodeValueJson.Decode.Valueをデコードできますが、Result String (List Person)を返します。

あなたはこのようなあなたのメッセージを定義した場合:ポートの最初の引数に変更されたことに注意してください(

port getPeople : (Json.Decode.Value -> msg) -> Sub msg 

subscriptions : Model -> Sub Msg 
subscriptions model = 
    getPeople (GetPeople << decodeValue (list peopleDecoder)) 

type Msg 
    = GetPeople (Result String (List Person)) 

あなたはこのようなあなたのサブスクリプションを設定することができValueの代わりにList Value

関連する問題