最近、ElmのHttpモジュールを使用してサーバーからデータを取得しようとしましたが、JSONをElmのカスタムタイプにデコードするのに行き詰まっています。
私のJSONは次のようになります。
[{
"id": 1,
"name": "John",
"address": {
"city": "London",
"street": "A Street",
"id": 1
}
},
{
"id": 2,
"name": "Bob",
"address": {
"city": "New York",
"street": "Another Street",
"id": 1
}
}]
次のようにデコードする必要があります。
type alias Person =
{
id : Int,
name: String,
address: Address
}
type alias Address =
{
id: Int,
city: String,
street: String
}
これまでに見つけたのは、デコーダー関数を作成する必要があるということです。
personDecoder: Decoder Person
personDecoder =
object2 Person
("id" := int)
("name" := string)
最初の2つのプロパティについてですが、ネストされたAddressプロパティを統合する方法と、これを組み合わせてリストをデコードする方法を教えてください。
まず、PersonDecoderと同様のAddressDecoderが必要です
編集:Elm 0.18にアップグレード
import Json.Decode as JD exposing (field, Decoder, int, string)
addressDecoder : Decoder Address
addressDecoder =
JD.map3 Address
(field "id" int)
(field "city" string)
(field "street" string)
次に、それを「アドレス」フィールドに使用できます。
personDecoder: Decoder Person
personDecoder =
JD.map3 Person
(field "id" int)
(field "name" string)
(field "address" addressDecoder)
人のリストは次のようにデコードできます。
personListDecoder : Decoder (List Person)
personListDecoder =
JD.list personDecoder