之前给大家推荐了一个不需要定义结构体就能操作xml的类库 ,今天再给大家推荐一个不需要定义结构体就能操作json的类库simplejson。

安装(go module)
 go get github.com/bitly/go-simplejson  
写入json文件
 // 实例化Json对象
jsonObject := simplejson.New()
// 设置name节点
jsonObject.Set("name", "simplejson test function")
// 设置person节点下的age节点
jsonObject.SetPath([]string{"person", "age"}, 20)
// 转换成 []byte
// 可以使用  jsonObject.Encode()  代替
b, err := jsonObject.MarshalJSON()

if err != nil {
  panic(err.Error())
}

// 创建文件并将json 写入
f, err := os.Create("./test.json")

if err != nil {
  panic("创建文件失败:" + err.Error())
}

defer f.Close()
if _, err := f.Write(b); err != nil {
  panic("写入文件失败:" + err.Error())
}  

效果如下

读取json文件和节点
 f, err := os.OpenFile("test.json", os.O_RDONLY, 0600)

if err != nil {
  panic("打开文件失败:" + err.Error())
}

defer f.Close()

b, err := ioutil.ReadAll(f)

if err != nil {
  panic("读取文件内容失败:" + err.Error())
}

jsonObject, err := simplejson.NewJson(b)
if err != nil {
  panic("实例化json对象失败:" + err.Error())
}

// 读取name节点 string类型接收 这里源码其实就是最简单的断言
name, _ := jsonObject.Get("name").String()
// 读取person节点下的age节点
age, _ := jsonObject.GetPath("person", "age").Int()
fmt.Println(name)// simplejson test function
fmt.Println(age)// 20