Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays ELM如何解码json数组中的不同值_Arrays_Json_Parsing_Decode_Elm - Fatal编程技术网

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

Arrays ELM如何解码json数组中的不同值,arrays,json,parsing,decode,elm,Arrays,Json,Parsing,Decode,Elm,我有一个JSON数组,数组中有不同的值,我不知道如何解析它。以下是一个例子: [ { "firstname": "John", "lastname": "Doe", "age": 30 }, { "companyName": "Doe enterprise", "location": "NYC", "numberOfEmployee": 10 } ] 我的JSON是这样的,数组的第一个元素是用户,第二个元素是公司。 我在Elm中有

我有一个JSON数组,数组中有不同的值,我不知道如何解析它。以下是一个例子:

[
  {
    "firstname": "John",
    "lastname": "Doe",
    "age": 30
  },
  {
    "companyName": "Doe enterprise",
    "location": "NYC",
    "numberOfEmployee": 10
  }
]
我的JSON是这样的,数组的第一个元素是用户,第二个元素是公司。 我在Elm中有相同的版本:

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
函数中获得我的
User
Company
通行证呢? 有一些类似于
Json.Decode.at
的东西,但它仅用于对象。 有没有一种方法可以做到这一点

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

Json.at
也适用于数组索引。首先,您需要一个
数据
类型来保存用户和公司:

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)
import Json.Decode为Json公开((:=)
类型别名数据=
{用户:用户
,公司:公司
}
您需要为用户和公司提供简单的解码器:

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)