lylovefl Back-End Dev Engineer

GO语言操作json

2017-12-11
go
 

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);
}


Similar Posts

Comments