ELM如何解码json数组中的不同值

Bou*_*TAC 3 arrays parsing json decode elm

我有一个在数组中具有不同值的JSON数组,我不知道如何解析它.这是一个例子:

[
  {
    "firstname": "John",
    "lastname": "Doe",
    "age": 30
  },
  {
    "companyName": "Doe enterprise",
    "location": "NYC",
    "numberOfEmployee": 10
  }
]
Run Code Online (Sandbox Code Playgroud)

所以我的JSON是这样的,数组的第一个元素是用户,第二个元素是公司.我有相同的榆树:

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

type alias Company =
  { companyName : String
  , location : String
  , numberOfEmployee : Int
  }
Run Code Online (Sandbox Code Playgroud)

然后:Task.perform FetchFail FetchPass (Http.get decodeData url).

那么我该如何获取UserCompany传递我的FetchPass功能呢?有一些东西,Json.Decode.at但它只是对象.有没有办法做这样的事情?

decodeData =
  Json.at [0] userDecoder
  Json.at [1] companyDecoder
Run Code Online (Sandbox Code Playgroud)

Cha*_*ert 5

Json.at适用于数组索引.首先,您需要一种Data类型来容纳用户和公司:

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

type alias Data =
  { user : User
  , company : Company
  }
Run Code Online (Sandbox Code Playgroud)

你需要为用户和公司提供简单的解码器:

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)
Run Code Online (Sandbox Code Playgroud)

最后,您可以使用Json.at获取这些数组索引的值.与您的示例的不同之处在于您需要传递包含整数索引而不是int的字符串:

dataDecoder : Json.Decoder Data
dataDecoder =
  Json.object2 Data
    (Json.at ["0"] userDecoder)
    (Json.at ["1"] companyDecoder)
Run Code Online (Sandbox Code Playgroud)