It isn't really possible to do so because there is no nice and type safe way of getting from a string in the JSON to a Go type, and a value of said type. You must write a little bit of extra code.
This article: http://eagain.net/articles/go-dynamic-json/ presents a good approach. On Wednesday, March 28, 2018 at 1:46:24 PM UTC+2, gary.wi...@victoriaplumb.com wrote: > > Is it possible to unmarshall Json by selecting the struct from a field in > the Json? > > I'm porting some PHP code to Go and this is something I may have to > approach differently. > Here is the Json: > > [ > { > "class": "Domain\\Model\\Message", > "skus": [ > "FOO1" > ], > "label": "Lorem", > "text": "Lorem ipsum dolor sit amet.", > } > ] > > In PHP the above Json is decoded into an associative array and I can use > the 'class' field to decode further to an object (dynamically selecting the > object using the 'class' value), like this: > > $obj = $decoded['class']::jsonDeserialize($decoded); > > > assert($obj->label == "Lorem"); > > So the above really translates to calling the static method on a concrete > class, like this: > > $obj = Domain\\Model\\Message::jsonDeserialize($decoded); > > Can I do anything similar in Go without using a switch defining separate > unmarshalling for each class? > > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.