有关 golang 里JSON 使用的用法整理
package main
import (
	"encoding/json"
	"fmt"
)
type JSON = map[string]interface{}
func makeJson() JSON {
	var obj = make(JSON)
	return obj
}
func stringify(obj JSON) string {
	b, err := json.Marshal(obj)
	if err != nil {
		fmt.Printf("marshal failed, err:%v\n", err)
	}
	return string(b)
}
func parse(str string) JSON {
	var obj = makeJson()
	err := json.Unmarshal([]byte(str), &obj)
	// 结果:map字典: map[count:1]
	//fmt.Printf("map字典: %v\n", obj) // 1
	if err != nil {
		fmt.Printf("unmarshal failed, err:%v\n", err)
		return obj
	}
	return obj
}
func main() {
	var obj = makeJson()
	obj["count"] = 123   // int
	obj["name"] = "test" // string
	var subobj = makeJson()
	subobj["aaa"] = 111
	subobj["bbb"] = 22.33
	subobj["ccc"] = "test"
	obj["subobj"] = subobj // int
	fmt.Printf("打印字典: %v\n", obj)
	str := stringify(obj)
	fmt.Printf("打印json: %v\n", str)
	fmt.Printf("打印 obj: %v\n", parse(str))
	newobj := parse(str)
	fmt.Printf("打印 json: %v\n", newobj["subobj"])
	sub := newobj["subobj"].(JSON)
	fmt.Printf("打印 json: %v\n", sub["aaa"])
}
通过 Path Syntax 解析/编辑JSON
GJSON 是一个 Go 包,它提供了一种从 json 文档中获取值的快速简单的方法。它具有单行检索、点符号路径、迭代和解析 json 行等功能。
本自述文件是如何使用 GJSON 的快速概述,有关更多信息,请查看GJSON 语法。
package main
import "github.com/tidwall/gjson"
const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`
func main() {
	value := gjson.Get(json, "name.last")
	println(value.String())
}
SJSON 是一个 Go 包,它提供了一种非常快速和简单的方法来在 json 文档中设置值。要快速检索 json 值,请查看GJSON。
对于命令行界面,请查看JJ。
package main
import "github.com/tidwall/sjson"
const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`
func main() {
	value, _ := sjson.Set(json, "name.last", "Anderson")
	println(value)
}
参考
go中对json数据的解析和封装  
Jsonvalue - Go map[string]interface{} 更快和更方便的替代品