I recently tried to get data from server with Elm's Http module and i'm stuck with decoding json to custom types in Elm.
My JSON looks like that:
[{
    "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
    }
}]
Which should be decoded to:
type alias Person =
{
 id : Int,
 name: String,
 address: Address
}
type alias Address = 
{
 id: Int,
 city: String,
 street: String
 }
What i found so far is that i need to write a decoder function:
personDecoder: Decoder Person
personDecoder =
  object2 Person
    ("id" := int)
    ("name" := string)
That for the first two properties but how i integrate the nested Address property and how combine this to decode the list?
You first need an Address Decoder similar to your Person Decoder
Edit: Upgraded to 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)
Then you can use that for the "address" field:
personDecoder: Decoder Person
personDecoder =
  JD.map3 Person
    (field "id" int)
    (field "name" string)
    (field "address" addressDecoder)
A list of persons can be decoded like this:
personListDecoder : Decoder (List Person)
personListDecoder =
  JD.list personDecoder
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With