欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

GoLang之標(biāo)準(zhǔn)庫encoding/json包

 更新時間:2022年08月17日 13:25:55   作者:GoGo在努力  
本文主要介紹了GoLang之標(biāo)準(zhǔn)庫encoding/json包,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

注:本文以Windos系統(tǒng)上Go SDK v1.8進行講解

1.JSON介紹

在進行前后分離式開發(fā)時,json顯得格外的重要,因為他是鏈接前后臺重要的樞紐
json是儲存和交換文本信息的語法,他類似于xml,但是他比xml更加的便捷,快速,易于解析。主要使用場景就是作為前后臺數(shù)據(jù)交互的樞紐,以下是一個簡單json的格式:
JSON: JavaScript Object Notation(JavaScript 對象標(biāo)記法)。
JSON 是一種存儲和交換數(shù)據(jù)的語法。
JSON 是通過 JavaScript 對象標(biāo)記法書寫的文本。
當(dāng)數(shù)據(jù)在瀏覽器與服務(wù)器之間進行交換時,這些數(shù)據(jù)只能是文本。
JSON 屬于文本,并且我們能夠把任何 JavaScript 對象轉(zhuǎn)換為 JSON,然后將 JSON 發(fā)送到服務(wù)器。
我們也能把從服務(wù)器接收到的任何 JSON 轉(zhuǎn)換為 JavaScript 對象。
以這樣的方式,我們能夠把數(shù)據(jù)作為 JavaScript 對象來處理,無需復(fù)雜的解析和轉(zhuǎn)譯。
JSON 使用 JavaScript 語法,但是 JSON 格式是純文本的。
文本可被任何編程語言作為數(shù)據(jù)來讀取和使用。
JSON 格式最初由 Douglas Crockford 提出。
因為 JSON 格式僅僅是文本,它能夠輕松地在服務(wù)器瀏覽器之間傳輸,并用作任何編程語言的數(shù)據(jù)格式。
JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。易于人閱讀和編寫。同時也易于機器解析和生成。JSON鍵值對是用來保存JS對象的一種方式,鍵/值對組合中的鍵名寫在前面并用雙引號""包裹,使用冒號:分隔,然后緊接著值;多個鍵值之間使用英文,分隔

2.JSON序列化、反序列化介紹

json的序列化與反序列化介紹:
那么在說明如何解析Json和XML之前,我們先來搞清楚兩個概念:序列化和反序列化。
序列化,即Serialization,是一個將對象的狀態(tài)信息轉(zhuǎn)變?yōu)榭梢源鎯騻鬏數(shù)男问降倪^程。
反序列化,即Deserialization,顧名思義是一個將可以存儲或傳輸?shù)男蛄修D(zhuǎn)變?yōu)槟硞€對象的狀態(tài)信息的過程。
1.這兩個過程互為逆過程;
2.無論是序列化還是反序列化,對象的狀態(tài)信息都與一段序列相對應(yīng)。

3.encoding/json包介紹

4.Marshal函數(shù)

//Student 學(xué)生
type Student struct {
	ID     int
	Gender string
	Name   string
}

//Class 班級
type Class struct {
	Title    string
	Students []Student
}

//student的構(gòu)造函數(shù)
func newStudent(id int, name string) Student {
	return Student{
		ID:   id,
		Name: name,
	}
}
func main() {
	//創(chuàng)建了一個班級變量
	c1 := Class{
		Title:    "101",
		Students: make([]Student, 0, 200),
	}
	//往班級變量中添加學(xué)生

	for i := 0; i < 10; i++ {
		tmpStu := newStudent(i, fmt.Sprintf("stu%02d,", i))
		c1.Students = append(c1.Students, tmpStu)
	}
	fmt.Println(c1)
	//輸出:{101 [{0  stu00,} {1  stu01,} {2  stu02,} {3  stu03,} {4  stu04,} {5  stu05,} {6  stu06,} {7  stu07,} {8  stu08,} {9  stu09,}]}
	//JSON序列化:結(jié)構(gòu)體轉(zhuǎn)化為JSON格式的字符串
	data, err := json.Marshal(c1)
	if err != nil {
		fmt.Println("json marshal failed")
		return
	}
	fmt.Printf("%T\n", data) //[]uint8
	//fmt.Println(data)//盡量不要采用這樣的方式
	fmt.Println(string(data))
	/*輸出:{"Title":"101","Students":[{"ID":0,"Gender":"","Name":"stu00,"},{"ID":1,"Gender":"","Name":"stu01,"},{"ID":2,"Gender":"","Name":"stu02,"},
	{"ID":3,"Gender":"","Name":"stu03,"},{"ID":4,"Gender":"","Name":"stu04,"},{"ID":5,"Gender":"", "Name":"stu05,"},{"ID":6,"Gender":"","Name":"stu06,"},
	{"ID":7,"Gender":"","Name":"stu07,"},{"ID":8,"Gender":"","Name":"stu08,"},{"ID":9,"Gender":"","Name":"stu09,"}]}*/
}

//大寫例子
package main

import (
	"encoding/json"
	"fmt"
)

//Student 學(xué)生
type Student struct {
	ID     int
	Gender string
	Name   string
}

//Class 班級
type Class struct {
	title    string
	Students []Student
}

//student的構(gòu)造函數(shù)
func newStudent(id int, name string) Student {
	return Student{
		ID:   id,
		Name: name,
	}
}
func main() {
	//創(chuàng)建了一個班級變量
	c1 := Class{
		title:    "101",
		Students: make([]Student, 0, 200),
	}
	//往班級變量中添加學(xué)生

	for i := 0; i < 10; i++ {
		tmpStu := newStudent(i, fmt.Sprintf("stu%02d,", i))
		c1.Students = append(c1.Students, tmpStu)
	}
	fmt.Println(c1)
	//輸出:{101 [{0  stu00,} {1  stu01,} {2  stu02,} {3  stu03,} {4  stu04,} {5  stu05,} {6  stu06,} {7  stu07,} {8  stu08,} {9  stu09,}]}
	//JSON序列化:結(jié)構(gòu)體轉(zhuǎn)化為JSON格式的字符串
	data, err := json.Marshal(c1)
	if err != nil {
		fmt.Println("json marshal failed")
		return
	}
	fmt.Printf("%T\n", data) //[]uint8
	//fmt.Println(data)//盡量不要采用這樣的方式
	fmt.Println(string(data))
	/*輸出:{"Students":[{"ID":0,"Gender":"","Name":"stu00,"},{"ID":1,"Gender":"","Name":"stu01,"},{"ID":2,"Gender":"","Name":"stu02,"},
	  {"ID":3,"Gender":"","Name":"stu03,"},{"ID":4,"Gender":"","Name":"stu04,"},{"ID":5,"Gender":"", "Name":"stu05,"},{"ID":6,"Gender":"","Name":"stu06,"},
	  {"ID":7,"Gender":"","Name":"stu07,"},{"ID":8,"Gender":"","Name":"stu08,"},{"ID":9,"Gender":"","Name":"stu09,"}]}*/
}

//小寫例子,json包不能看到小寫字段的,所以小寫字段的不會被序列化

5.Umarshal函數(shù) 

//Student 學(xué)生
type Student struct {
	ID     int
	Gender string
	Name   string
}
//Class 班級
type Class struct {
	Title    string
	Students []Student
}
//student的構(gòu)造函數(shù)
func newStudent(id int, name string) Student {
	return Student{
		ID:   id,
		Name: name,
	}
}
func main() {
	//JSON反序列化:JSON格式的字符串轉(zhuǎn)化為結(jié)構(gòu)體
	var c1 Class
	//str的內(nèi)容使用反引號來標(biāo)注的``
	str := `{"Title":"101","Students":[{"ID":0,"Gender":"男","Name":"stu00"},{"ID":1,"Gender":"男","Name":"stu01"},{"ID":2,"Gender":"男","Name":"stu02"},{"ID":3,"Gender":"男","Name":"stu03"},{"ID":4,"Gender":"男","Name":"stu04"},{"ID":5,"Gender":"男","Name":"stu05"},{"ID":6,"Gender":"男","Name":"stu06"},{"ID":7,"Gender":"男","Name":"stu07"},{"ID":8,"Gender":"男","Name":"stu08"},{"ID":9,"Gender":"男","Name":"stu09"}]}`
	err := json.Unmarshal([]byte(str), &c1) //第二個參數(shù)用來存放第一個參數(shù)的內(nèi)容,c2需要被修改,想要被需改成功必須得傳入指針
	if err != nil {
		fmt.Println("json unmarshal failed!")
		return
	}
	fmt.Println(c1)
	//輸出:{101 [{0 男 stu00} {1 男 stu01} {2 男 stu02} {3 男 stu03} {4 男 stu04} {5 男 stu05} {6 男 stu06} {7 男 stu07} {8 男 stu08} {9 男 stu09}]}
}
//結(jié)構(gòu)體大寫例子
//Student 學(xué)生
type Student struct {
	ID     int
	Gender string
	Name   string
}
//Class 班級
type Class struct {
	title    string
	Students []Student
}
//student的構(gòu)造函數(shù)
func newStudent(id int, name string) Student {
	return Student{
		ID:   id,
		Name: name,
	}
}
func main() {
	//JSON反序列化:JSON格式的字符串轉(zhuǎn)化為結(jié)構(gòu)體
	var c1 Class
	//str的內(nèi)容使用反引號來標(biāo)注的``
	str := `{"title":"101","Students":[{"ID":0,"Gender":"男","Name":"stu00"},{"ID":1,"Gender":"男","Name":"stu01"},{"ID":2,"Gender":"男","Name":"stu02"},{"ID":3,"Gender":"男","Name":"stu03"},{"ID":4,"Gender":"男","Name":"stu04"},{"ID":5,"Gender":"男","Name":"stu05"},{"ID":6,"Gender":"男","Name":"stu06"},{"ID":7,"Gender":"男","Name":"stu07"},{"ID":8,"Gender":"男","Name":"stu08"},{"ID":9,"Gender":"男","Name":"stu09"}]}`
	err := json.Unmarshal([]byte(str), &c1) //第二個參數(shù)用來存放第一個參數(shù)的內(nèi)容,c2需要被修改,想要被需改成功必須得傳入指針
	if err != nil {
		fmt.Println("json unmarshal failed!")
		return
	}
	fmt.Println(c1)
	//輸出:{[{0 男 stu00} {1 男 stu01} {2 男 stu02} {3 男 stu03} {4 男 stu04} {5 男 stu05} {6 男 stu06} {7 男 stu07} {8 男 stu08} {9 男 stu09}]}
}
//小寫例子

6.結(jié)構(gòu)體標(biāo)簽Tag

Tag是結(jié)構(gòu)體的元信息,可以在運行的時候通過反射的機制讀取出來。 Tag在結(jié)構(gòu)體字段的后方定義,由一對反引號包裹起來,具體的格式如下:
key1:"value1" key2:"value2"
結(jié)構(gòu)體tag由一個或多個鍵值對組成。鍵與值使用冒號分隔,值用雙引號括起來。同一個結(jié)構(gòu)體字段可以設(shè)置多個鍵值對tag,不同的鍵值對之間使用空格分隔。
注意事項: 為結(jié)構(gòu)體編寫Tag時,必須嚴格遵守鍵值對的規(guī)則。結(jié)構(gòu)體標(biāo)簽的解析代碼的容錯能力很差,一旦格式寫錯,編譯和運行時都不會提示任何錯誤,通過反射也無法正確取值。例如不要在key和value之間添加空格。

到此這篇關(guān)于GoLang之標(biāo)準(zhǔn)庫encoding/json包的文章就介紹到這了,更多相關(guān)GoLang encoding/json包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • Golang使用Gin創(chuàng)建Restful API的實現(xiàn)

    Golang使用Gin創(chuàng)建Restful API的實現(xiàn)

    本文主要介紹了Golang使用Gin創(chuàng)建Restful API的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Go常問的一些面試題匯總(附答案)

    Go常問的一些面試題匯總(附答案)

    通常我們?nèi)ッ嬖嚳隙〞行┎诲e的Golang的面試題目的,所以總結(jié)下,讓其他Golang開發(fā)者也可以查看到,同時也用來檢測自己的能力和提醒自己的不足之處,這篇文章主要給大家介紹了關(guān)于Go常問的一些面試題以及答案的相關(guān)資料,需要的朋友可以參考下
    2023-10-10
  • Go 驗證字符串中是否包含中文(推薦)

    Go 驗證字符串中是否包含中文(推薦)

    這篇文章主要介紹了Go 驗證字符串中是否包含中文,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • Go語言在Linux環(huán)境下輸出彩色字符的方法

    Go語言在Linux環(huán)境下輸出彩色字符的方法

    這篇文章主要介紹了Go語言在Linux環(huán)境下輸出彩色字符的方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-04-04
  • go語言中切片與內(nèi)存復(fù)制 memcpy 的實現(xiàn)操作

    go語言中切片與內(nèi)存復(fù)制 memcpy 的實現(xiàn)操作

    這篇文章主要介紹了go語言中切片與內(nèi)存復(fù)制 memcpy 的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 8個Elasticsearch高頻面試題和答案整理

    8個Elasticsearch高頻面試題和答案整理

    這篇文章為大家精選了8道Elasticsearch高頻面試題和答案,并且給出了這些知識點的應(yīng)用場景、也給出了解決這些問題的思路,希望對大家有所幫助
    2023-06-06
  • VScode下配置Go語言開發(fā)環(huán)境(2023最新)

    VScode下配置Go語言開發(fā)環(huán)境(2023最新)

    在VSCode中配置Golang開發(fā)環(huán)境是非常簡單的,本文主要記錄了Go的安裝,以及給vscode配置Go的環(huán)境,具有一定的參考價值,感興趣的可以了解一下
    2023-10-10
  • Golang標(biāo)準(zhǔn)庫container/list的用法圖文詳解

    Golang標(biāo)準(zhǔn)庫container/list的用法圖文詳解

    提到單向鏈表,大家應(yīng)該是比較熟悉的了,這篇文章主要為大家詳細介紹了Golang標(biāo)準(zhǔn)庫container/list的用法相關(guān)知識,感興趣的小伙伴可以了解下
    2024-01-01
  • Go中的交叉編譯問題

    Go中的交叉編譯問題

    這篇文章主要介紹了Go中的交叉編譯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • golang變量uint、int大小溢出后的結(jié)果方式

    golang變量uint、int大小溢出后的結(jié)果方式

    在Go語言中,變量的大小溢出后,`uint`類型會回繞到最小值,而`int`類型會回繞到最大值的相反數(shù),例如,`uint8`溢出后會變成0,`int64`溢出后會變成最小的負數(shù)
    2024-12-12

最新評論