Go语言基础入门(处理JSON)

Go语言基础入门(处理JSON),第1张

JavaScript 对象表示法是一种用于存储和交换数据的格式,这是一种人类能够理解的纯文本格式。JSON可以以键值对的方式表示数据,也可以以数组的方式表示数据。从很大程度上说它已经取代可扩展的标记语言XML。

Go标准库中提供了encoding/json包,用于编码和解码JSON数据。

函数Marshal将Go数据编码为JSON。

jsonByteData, err = json.Marshall(p)

在JSON数据中,所有的键名都是以小写字母大头。因此我们对结构体中的数据字段指定标签,对于带JSON标签的数据,将使用标签中的数据替换。

package main

import (
	"encoding/json"
	"fmt"
	"log"
)

type Person struct {
	Name string `json:"name"`
	Age int `json:"age"`
	Hobbies []string `json:"hobbies"`
}

func main()  {
	hobbies := []string{"Cycling", "Chees", "Techno"}
	p := Person{
		Name: "G",
		Age: 2,
		Hobbies: hobbies,
	}
	fmt.Printf("%+v\n", p)
	jsonByteData, err := json.Marshal(p)
	if err != nil{
		log.Fatal(err)
	}
	jsonStringData := string((jsonByteData))
	fmt.Println(jsonStringData)
}

在JSON键名后面加上omitempty用于在编码为JSON时忽略结构体中的空字段。如果不写,结构体中的空字段将被设定为零值。

type Person struct {
	Name string `json:"name,omitempty"`
	Age int `json:"age,omitempty"`
	Hobbies []string `json:"hobbies,omitempty"`
}

函数Unmarshal接受一个字节切片以及一个指定要将数据解码为何种格式的接口。该函数将JSON字符串转换为结构体实例。

package main

import (
	"encoding/json"
	"fmt"
	"log"
)
type Person struct {
	Name string `json:"name"`
	Age int `json:"age"`
	Hobbies []string `json:"hobbies"`
}

func main()  {
	jsonStringData := `{"name":"GE","age":44,"hobbies":["Cys","Che","Y"]}`

	jsonByteData := []byte(jsonStringData) //JSON字符串数据转换为字节切片
	p := Person{} //定义结构体来告诉解码器将键映射到的字段
	err := json.Unmarshal(jsonByteData, &p)
	if err != nil{
		log.Fatal(err)
	}
	fmt.Printf("%+v\n", p)
}

JavaScript是一种弱类型语言,即不显式的声明变量的数据类型。而Go是强类型的。所以在创建用于编码和解码JSON的结构体时,必须对上述数据类型的对应关系做到心中有数,如果数据类型不匹配,encoding/json包将会引发错误。

GO和JSON数据类型
JSON       Go
Boolean       bool
Numberfloat64
Stringstring
Array[]interface{}
Objectmap[string]interface{}
Nullnil

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/990616.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存