Elm

2016-09-04 18 views
6

'daki Nesnelerle Decode Json Array Elm'nin Http modülüyle sunucudan veri almayı denedim ve Elm'deki özel türlere kod çözme jsonu ile takıldım.Elm

Benim JSON benziyor:

için çözümlenmiş olmalıdır
[{ 
    "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 
} 

i bugüne kadar bulunmuş ı bir dekoder işlevi yazmak gerektiğidir Ne:

personDecoder: Decoder Person 
personDecoder = 
    object2 Person 
    ("id" := int) 
    ("name" := string) 

Bu ilk iki özellik için, ancak iç içe geçmiş Adres özelliğini nasıl bütünleştirdiğimi ve bunun kod çözme işlemi ile nasıl birleştirileceğini o liste?

cevap

14

Öncelikle Kişi Decoder

Edit benzer bir adres Decoder gerekir:

import Json.Decode as JD exposing (field, Decoder) 

addressDecoder : Decoder Address 
addressDecoder = 
    JD.map3 Address 
    (field "id" int) 
    (field "city" string) 
    (field "street" string) 

Elm 0.18 yükseltildi Sonra "adres" alanı için kullanabiliriz:

personDecoder: Decoder Person 
personDecoder = 
    JD.map3 Person 
    (field "id" int) 
    (field "name" string) 
    (field "address" addressDecoder) 

Kişilerden oluşan bir liste şu şekilde çözülebilir:

personListDecoder : Decoder (List Person) 
personListDecoder = 
    JD.list personDecoder 
+0

Tamam, teşekkürler, ama bir Kişi listesini çözmek için bunları nasıl birleştirebilirim? – rubiktubik

+1

Yanıtı, liste kod çözücüsünü içerecek şekilde güncelledim –

+0

Teşekkür ederiz! Çok güzel bir çözüm! – rubiktubik

İlgili konular