golang学习----JSON文件操作

golang操作JSON文件

JSON 做为一种重要的数据格式,在如今的web开发中越来越重要。 在golang中我们可以使用json包中的方法来操作json格式的文件。

生成JSON数据

	json := make(map[string]interface{})
	json["name"] = "foo"
	json["title"] = "bar"
	json["content"] = map[string]interface{}{
		"first": "one",
		"second": "two",
	}
	//	缩进json(格式化)
	//	若使用Marshal则不会格式化,这样不方便阅读
	bytes, err := json.MarshalIndent(json, "", " ")
	if err != nil{
		log.Println("ERROR:",err)
	}
	fmt.Println(string(bytes))

读取JSON数据

这里我们使用从文件中获取的JSON

//	读取文件中的数据
func readJson(filePath string) (result string){
	file, err := os.Open(filePath)
	defer file.Close()
	if err != nil {
		fmt.Println("ERROR:", err)
	}
	buf := bufio.NewReader(file)
	for {
		s, err := buf.ReadString('
')
		result += s
		if err != nil {
			if err == io.EOF{
				fmt.Println("Read is ok")
				break
			}else{
				fmt.Println("ERROR:", err)
				return
			}
		}
	}
	return result
}


func main() {
	var data struct{
		Id int
		Customerld int
		Raised string
		Due string
		Paid bool
		Note string
		Items []struct{
			Id string
			Price float64
			Quantity int
			Note string
		}
	}
	result := readJson("F:\GolangProject\io\file_option\json\json.json")
	err := json.Unmarshal([]byte(result), &data)
	if err != nil {
		fmt.Println("ERROR:",err)
	}
	fmt.Println(data)
}

PS:以上注意构造的对象的参数首字母必须大写,否则JSON数据是不会添加到结构体中去。

原文地址:https://www.cnblogs.com/bananafish/p/11923448.html