GO语言操作json
概述
和其他的脚本语言差不多,GO内置了处理json的函数,json数据要搭配这struct来一起用!
保存json
func saveJson(fileName string,key interface{}){
outFile,err := os.Create(fileName)
checkError(err)
encoder := json.NewEncoder(outFile)
err = encoder.Encode(key)
checkError(err)
outFile.Close()
}
读取json
这是读取文件中的json数据;
func loadJson(fileName string,key interface{}) {
inFile,err := os.Open(fileName)
checkError(err)
decoder := json.NewDecoder(inFile)
err = decoder.Decode(key)
checkError(err)
inFile.Close()
}
但是实际开发中我们往往是接收api传过来的json数据,下面是接收post数据传过来的json数据
func loadJson(req *http.Request) {
var person1 Person
per, _ := ioutil.ReadAll(req.Body)
json.Unmarshal(per, &person1)
//TODO
}
完整代码
package main
import (
"encoding/json"
"fmt"
"os"
)
type Person struct {
Name Name
Email []Email
}
type Name struct {
Family string
Personal string
}
type Email struct {
Kind string
Address string
}
func (p Person) String() string {
s := p.Name.Personal + " " + p.Name.Family
for _, v := range p.Email {
s += "\n" + v.Kind + ": " + v.Address
}
return s
}
func saveJson(fileName string,key interface{}){
outFile,err := os.Create(fileName)
checkError(err)
encoder := json.NewEncoder(outFile)
err = encoder.Encode(key)
checkError(err)
outFile.Close()
}
func loadJson(fileName string,key interface{}) {
inFile,err := os.Open(fileName)
checkError(err)
decoder := json.NewDecoder(inFile)
err = decoder.Decode(key)
checkError(err)
inFile.Close()
}
func checkError(err error) {
if err != nil {
fmt.Println("Fatal error ", err.Error())
os.Exit(1)
}
}
func main() {
person := Person{
Name: Name{Family: "Newmarch", Personal: "Jan"},
Email: []Email{Email{Kind: "home", Address: "jan@newmarch.name"},
Email{Kind: "work", Address: "j.newmarch@boxhill.edu.au"}}}
saveJson("person1.json", person)
var person1 Person
loadJson("person.json", &person1)
fmt.Println("Person", person1.String())
fmt.Println("name",person1.Name.Family);
}