Given that your JSON looks like
{ "radius" : 10 }
or
{ "width" : 20, "height" : 15}
Then it will do the trick
import Json.Decode as Json exposing ((:=))
decodeShape : Json.Decoder Shape
decodeShape =
Json.oneOf
[ decodeShapeRectangle
, decodeShapeCircle
]
decodeShapeRectangle : Json.Decoder Shape
decodeShapeRectangle =
Json.map ShapeRectangle <|
Json.object2 Rectangle
("width" := Json.int)
("height" := Json.int)
decodeShapeCircle : Json.Decoder Shape
decodeShapeCircle =
Json.object1 (ShapeCircle << Circle)
("radius" := Json.int)
A few additional things: I often add a type and tag field to help disambiguate when I have data types with common field names. Then JSON looks like
{ "type":"shape", "tag":"circle", "radius":10 }
In addition, I think it :=will be replaced by fieldthe upcoming version 0.18.
Hi,
Michael
source
share