我有一个在数组中具有不同值的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)
。
那么如何在我的User
函数中获得Company
和FetchPass
次传递?
有类似Json.Decode.at
之类的内容,但它只适用于对象。
有没有办法做这样的事情?
decodeData =
Json.at [0] userDecoder
Json.at [1] companyDecoder
答案 0 :(得分: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)