上两篇中我们在介绍 Go 网路的操作中,有稍微提到 json 格式,那这篇将介绍有关何为 json,以及 Go 语言里如何处理此格。json 为 JavaScript Object Notation 的简称,此为 JavaScript 物件的标准格式。常用於网站上的资料呈现与传输,以纯文字去储存和传送结构资料。虽然是 JavaScript 的,但是其他语言也支援解析 json,当然也包含 Go 语言,而作为後端工程师的话,你会常常遇到 json 格式。我们稍微看一下格式长得怎样:
json 为 JavaScript Object Notation 的简称,此为 JavaScript 物件的标准格式。常用於网站上的资料呈现与传输,以纯文字去储存和传送结构资料。虽然是 JavaScript 的,但是其他语言也支援解析 json,当然也包含 Go 语言,而作为後端工程师的话,你会常常遇到 json 格式。我们稍微看一下格式长得怎样:
{
"class" : "A" ,
"persons" : [
{"id" : 1 , "name" : "JC"},
{"id" : 2 , "name" : "Eric"},
{"id" : 3 , "name" : "Zhen"}
]
}
Go 语言中的 encoding/json 套件,提供了函式 json.Unmarshal 可以把 json 字串转成 struct,而 json.Marshal 可以将 struct 转成 json 字串,以下我直接示范一个范例:
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Id int64 `json:"id"`
Name string `json:name`
}
func main() {
data := []byte(`{"id" : 1 , "name" : "JC"}`)
var student Student
json.Unmarshal(data, &student)
fmt.Println(student)
jsondata, _ := json.Marshal(student)
fmt.Println(string(jsondata))
}
上面程序,我们宣告一个名为 Student 的 struct,里面包含两个结构,且与之前不太一样的是,你必须告诉他,struct 的 key 对应到的 json 格式的 key 为何,如此一来,你就可以使用 Unmarshal 和 Marshal 来对 json 和 struct 做转换。
而你的 json 可能会比较复杂,或许会包含一些 array,这时你就要去宣吿子母 struct,以下示范一个例子:
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Id int64 `json:"id"`
Name string `json:name`
}
type Class struct {
Class string `json:"class"`
Students []Student `json:students"`
}
func main() {
data := []byte(`{"class" : "A", "students" : [{"id" : 1 , "name" : "JC"}, {"id" : 2 , "name" : "Zhen"}]}`)
var class Class
json.Unmarshal(data, &class)
fmt.Println(class)
jsondata, _ := json.Marshal(class)
fmt.Println(string(jsondata))
}
你可以以自己的需求去设计 struct,去达到解析 json 的功能!
处理 json 是後端工程师几乎都会遇到的课题,而在 Go 语言中提供很方便的套件,让你可以在 json 和 struct 之间作转换,只是在设计 struct 要多费心。谢谢各位读者今天的阅读,希望今天的讲解对你有帮助!
>>: Day 20: Security Hub 新帐号加入、Insight设定
大纲 安装 Ultimate Member plugin UM三大表单 实作律师卡片呈现页 终於到了...
HTML的每个标签(元素)都是一个Box,因此都由content、padding、border、ma...
这个时候就要打开那个工程师很常用的东西,以前对工程师的印象就是打开一个黑黑的东西,输入一些什麽东西。...
前言 计算机概论虽然是高中职的学科,但这也是身为工程师的基本常识,没有这些底子我们甚至没有办法跟其他...
TableLayout(表格布局) TableLayout是我相当爱用的布局之一, 他能够井然有序地...