2016-09-16 22 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)

那麼如何讓我的UserCompany通過我的FetchPass函數? 有一些像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得到這些數組索引處的值。與你的例子不同的是,你需要傳遞一個包含整數索引而不是int的字符串:

dataDecoder : Json.Decoder Data 
dataDecoder = 
    Json.object2 Data 
    (Json.at ["0"] userDecoder) 
    (Json.at ["1"] companyDecoder)