之前给大家推荐了一个不需要定义结构体就能操作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