之前给大家推荐了一个不需要定义结构体就能操作xml的类库etree,今天再给大家推荐一个不需要定义结构体就能操作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 functionfmt.Println(age)// 20