先声明一个结构体
type Type struct{ 属性1 string 属性2 int }
读文件的函数
//Type返回值类型 func Read() Type { filePtr, err := os.Open("*json文件路径*") if err != nil { fmt.Println("文件打开失败 [Err:%s]", err.Error()) } defer filePtr.Close() var data ReturnType // 创建json解码器 decoder := json.NewDecoder(filePtr) err = decoder.Decode(&list) if err != nil { fmt.Println("解码失败", err.Error()) } else { fmt.Println("解码成功") } return data }
写文件的函数,这里如果如果已经存在info.json,会覆盖原本的文件,也可以调用os.Open
方法
func Write(data Type) { // 创建文件 filePtr, err := os.Create("info.json") if err != nil { fmt.Println("文件创建失败", err.Error()) return } defer filePtr.Close() // 创建json编码器 encoder := json.NewEncoder(filePtr) err = encoder.Encode(&list) if err != nil { fmt.Println("编码失败", err.Error()) } else { fmt.Println("编码成功") } }
struct转json
func encode(stu Stu, str *string) { // 返回的是一个byte数组 jsontype, _ := json.Marshal(stu) // 强制转换为字符串 *str = string(jsontype) }
json转struct
func decode(str string, stu *Stu) { json.Unmarshal([]byte(str), stu) }
在main函数调用
func main() { stu := Stu{ Name: "赵梓鈞", Id: 444, } var result string // 调用序列化方法 encode(stu, &result) str := `{"Name":"李存礼","Id":444}` var sutd Stu // 调用反序列化方法 decode(str, &sutd) }