Encoding JSON
Encoding Decoding is not as straight forward as other languages as it needs to be mapped to a struct.
Or a generic map[interface] can be used if you don’t know the type in advance.
package main
import (
    "encoding/json"
    "fmt"
)
type Data struct {
    Id int `json:"id"`
    List []string `json:"list"`
    NotPrint string `json:"-"`
}
func main(){
    d := Data{Id: 123, List: []string{"abc", "b"},  NotPrint: "This won't print"}
    result, err := json.MarshalIndent(d, "","\t")
    if err != nil {
        panic(err)
    }
    fmt.Printf("%s\n", result)
}
Decoding JSON
package main
import (
    "encoding/json"
    "fmt"
)
type Data struct {
    Id int `json:"id"`
    List []string `json:"list"`
    NotPrint string `json:"-"`
}
var b = []byte(`
  {
    "id" : 123,
    "list": ["a", "b", "c"]
   }
`)
func main() {
   var d Data
   valid := json.Valid(b)
   if valid {
    json.Unmarshal(b, &d)
    fmt.Printf("%#v", d)
   }
}