I would say the most idiomatic way is having defined structs and using encoding/json. Even when you don't know the json schema in advance you can still parse it into an interface{}.
Here's an example: http://play.golang.org/p/jrqBcPuQei
It's definitely safer, but it's a living hell having to define a class for each possible json structure in Java with gson.
Not sure where Java came into the conversation but I found a service[1] which I find really helpful for generating Golang structs from JSON. There is also a CLI tool[2] that does the same.