2016-09-16 11 views
3

配列の値が異なるJSON配列がありますが、解析する方法がわかりません。次に例を示します。ELM json配列の異なる値をデコードする方法

[ 
    { 
    "firstname": "John", 
    "lastname": "Doe", 
    "age": 30 
    }, 
    { 
    "companyName": "Doe enterprise", 
    "location": "NYC", 
    "numberOfEmployee": 10 
    } 
] 

だから私のJSONは、配列の最初の要素は、ユーザー、および第二の会社で、このようなものです。その後、

type alias User = 
    { firsname : String 
    , lastname : String 
    , age : Int 
    } 

type alias Company = 
    { companyName : String 
    , location : String 
    , numberOfEmployee : Int 
    } 

Task.perform FetchFail FetchPass (Http.get decodeData url) 私はエルムで同等のものを持っています。

したがって、私のFetchPass機能で私のUserCompanyが合格になるのですか? Json.Decode.atのようなものがありますが、それはオブジェクトのみです。 ここに、このようなことをする方法がありますか?

decodeData = 
    Json.at [0] userDecoder 
    Json.at [1] companyDecoder 

答えて

5

Json.atも配列インデックスとして機能します。まず、ユーザーと企業保持するDataタイプが必要になります:

import Json.Decode as Json exposing ((:=)) 

type alias Data = 
    { user : User 
    , company : Company 
    } 

をそして、あなたは、ユーザーと企業のための簡単なデコーダーが必要です:

userDecoder : Json.Decoder User 
userDecoder = 
    Json.object3 User 
    ("firstname" := Json.string) 
    ("lastname" := Json.string) 
    ("age" := Json.int) 

companyDecoder : Json.Decoder Company 
companyDecoder = 
    Json.object3 Company 
    ("companyName" := Json.string) 
    ("location" := Json.string) 
    ("numberOfEmployee" := Json.int) 

をそして最後に、あなたが取得するJson.atを使用することができますこれらの配列インデックスの値。あなたの例との違いは、整数の代わりに整数インデックスを含む文字列を渡す必要があるということです。

dataDecoder : Json.Decoder Data 
dataDecoder = 
    Json.object2 Data 
    (Json.at ["0"] userDecoder) 
    (Json.at ["1"] companyDecoder) 
関連する問題