Day24-Go Json处理

前言

上两篇中我们在介绍 Go 网路的操作中,有稍微提到 json 格式,那这篇将介绍有关何为 json,以及 Go 语言里如何处理此格。json 为 JavaScript Object Notation 的简称,此为 JavaScript 物件的标准格式。常用於网站上的资料呈现与传输,以纯文字去储存和传送结构资料。虽然是 JavaScript 的,但是其他语言也支援解析 json,当然也包含 Go 语言,而作为後端工程师的话,你会常常遇到 json 格式。我们稍微看一下格式长得怎样:

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"}
	]
}

encoding/json

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 要多费心。谢谢各位读者今天的阅读,希望今天的讲解对你有帮助!


<<:  Day24-DIY总是比较麻烦 如何建立chart

>>:  Day 20: Security Hub 新帐号加入、Insight设定

会员管理网站实作篇- (以律师谘询平台为例子) part4

大纲 安装 Ultimate Member plugin UM三大表单 实作律师卡片呈现页 终於到了...

【学习笔记】CSS中的HTML Tag Box设定

HTML的每个标签(元素)都是一个Box,因此都由content、padding、border、ma...

# Day22--眼前一黑...啊!原来是终端机!

这个时候就要打开那个工程师很常用的东西,以前对工程师的印象就是打开一个黑黑的东西,输入一些什麽东西。...

Day 22:计算机概论

前言 计算机概论虽然是高中职的学科,但这也是身为工程师的基本常识,没有这些底子我们甚至没有办法跟其他...

Day-14 TableLayout

TableLayout(表格布局) TableLayout是我相当爱用的布局之一, 他能够井然有序地...