I'm having trouble wrapping my head around how to unmarshal a raw json string that was from a previously unmarshaled json byte array. I have the current code:
type Message struct {
Event string
Data json.RawMessage // how data is parsed depends on the event
}
type CreateMessage struct {
id int
}
var evt = []byte(`{"event": "create", "data" :{"id":5 }}`)
func main() {
var message Message
log.Println(string(evt))
json.Unmarshal(evt, &message)
log.Println(message)
log.Println(message.Event)
log.Println(string(message.Data))
fmt.Printf("%+v\n", message)
var message2 = new(CreateMessage)
err := json.Unmarshal( message.Data, &message2 )
log.Println(message2)
log.Println(err)
}
And the output is:
2015/06/29 23:22:10 {"event": "create", "data" :{"id":5 }}
2015/06/29 23:22:10 {create [123 34 105 100 34 58 53 32 125]}
2015/06/29 23:22:10 create
2015/06/29 23:22:10 {"id":5 }
{Event:create Data:[123 34 105 100 34 58 53 32 125]}
2015/06/29 23:22:10 &{0}
2015/06/29 23:22:10 <nil>
Why can't I unmarshal data as a CreateMessage
object? I tried the example here and here but they don't unmarshal the nested raw json data and that is exactly what I'm trying to do.