Как декодировать JSON с типом свойства переменной
У меня есть следующий JSON:
{
"items": [
{
"level": 1,
"displayValue": "das",
"dataValue": "das"
},
{
"level": 2,
"displayValue": "das",
"dataValue": {
"name": "some name",
"scope": "some scope"
}
}
]
}
И следующие типы:
type alias Item =
{ level: Int
, displayValue: String
, dataValue: DataValue
}
type alias KeyValue =
{ name: String
, scope: String
}
type DataValue
= Value String
| Key KeyValue
Как бы я написал декодер для свойства dataValue, поскольку он может быть двух совершенно разных типов?
1 ответ
Решение
Ты можешь использовать oneOf
:
import Json.Decode as JD
dataValueDecoder : JD.Decoder DataValue
dataValueDecoder =
JD.oneOf
[ JD.map Value JD.string
, JD.map Key keyValueDecoder
]
keyValueDecoder : JD.Decoder KeyValue
keyValueDecoder =
JD.map2 KeyValue
(JD.field "name" JD.string)
(JD.field "scope" JD.string)