亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Go語(yǔ)言學(xué)習(xí)之JSON編碼解析與使用

 更新時(shí)間:2023年02月14日 11:04:19   作者:猿碼記  
這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言中JSON編碼的解析與使用已經(jīng)JSON與Map、結(jié)構(gòu)體的互相轉(zhuǎn)化,文中的示例代碼講解詳細(xì),需要的可以參考一下

1.Map轉(zhuǎn)JSON

package main
import (
    "encoding/json"
    "fmt"
)
func main()  {
    // map里面
    map1 := map[string]string {
        "name":"張三",
        "age":"18",
        "home":"北京",
    }
    // 將map解析成json
    json1, err := json.Marshal(map1)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("json1: %s  類型: %T \n",json1,json1)
  
    map2 := map[string][]string {
        "fruit": {"香蕉","葡萄"},
        "coder":{"PHP","Go","Java"},
        "likes":{"打游戲","看動(dòng)漫"},
    }
    json2, err := json.Marshal(map2)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("json2: %s  類型: %T \n",json2,json2)
}
/**輸出
json1: {"age":"18","home":"北京","name":"張三"}  類型: []uint8 
json2: {"coder":["PHP","Go","Java"],"fruit":["香蕉","葡萄"],"likes":["打游戲","看動(dòng)漫"]}  類型: []uint8 
*/

2. Json轉(zhuǎn)Map

package main
import (
    "encoding/json"
    "fmt"
)
func main()  {
    json1 := `{"age":"18","home":"北京","name":"張三"}`
    map1 := make(map[string]string)
    err := json.Unmarshal([]byte(json1), &map1)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("map1: %v T: %T\n",map1,map1)

    json2 := `{"coder":["PHP","Go","Java"],"fruit":["香蕉","葡萄"],"likes":["打游戲","看動(dòng)漫"]}`
    map2 := make(map[string][]string)
    err = json.Unmarshal([]byte(json2), &map2)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("map2: %v T: %T\n",map2,map2)
}
/**輸出
map1: map[age:18 home:北京 name:張三] T: map[string]string
map2: map[coder:[PHP Go Java] fruit:[香蕉 葡萄] likes:[打游戲 看動(dòng)漫]] T: map[string][]string
*/

3.結(jié)構(gòu)體轉(zhuǎn)JSON

3.1 無(wú)字段標(biāo)簽

結(jié)構(gòu)體轉(zhuǎn)換成JSON在開(kāi)發(fā)中經(jīng)常會(huì)用到。encoding/json包是通過(guò)反射機(jī)制來(lái)實(shí)現(xiàn)編解碼的,<font color=red>因此結(jié)構(gòu)體必須導(dǎo)出所轉(zhuǎn)換的字段,沒(méi)有導(dǎo)出的字段不會(huì)被encoding/json包解析。</font>

package main
import (
    "encoding/json"
    "fmt"
)
type Student struct {
    Name string
    Age int
    Class string
    phone string //小寫字段,則不是會(huì)導(dǎo)出
}
func main()  {
    s := Student{
        Name:  "張三",
        Age:   17,
        Class: "三年級(jí)",
        phone: "17600112222",
    }
    json1, err := json.Marshal(s)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("json: %s \n",json1)
}
// 輸出 json: {"Name":"張三","Age":17,"Class":"三年級(jí)"}

3.2 有字段標(biāo)簽

json包在解析結(jié)構(gòu)體時(shí),如果遇到keyJSON的字段標(biāo)簽,則會(huì)按照一定規(guī)則解析該標(biāo)簽。

package main
import (
    "encoding/json"
    "fmt"
)
// 定義一個(gè)學(xué)生結(jié)構(gòu)體
type Student struct {
    Name  string `json:"_name"` // 字段標(biāo)簽的語(yǔ)法
    Age   int    `json:"_age"`
    Class string `json:"-"` // 不解析
    Phone string `json:"phone"`
    Score float32 // 沒(méi)有標(biāo)簽時(shí),則用字段名
}
func main()  {
    s := Student{
        Name:  "張三",
        Age:   17,
        Class: "三年級(jí)",
        Phone: "17600112222",
        Score: 88.5,
    }
    json1, err := json.Marshal(s)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("json: %s \n",json1)
}
// 輸出-> json: {"_name":"張三","_age":17,"phone":"17600112222","Score":88.5}

1.規(guī)則總結(jié)

  • 有標(biāo)簽名時(shí),標(biāo)簽名會(huì)作為key
  • 沒(méi)有標(biāo)簽時(shí),則會(huì)使用字段名。
  • 有標(biāo)簽名時(shí),但是標(biāo)簽名的值為-,則不會(huì)導(dǎo)出

3.3 匿名字段

json包在解析匿名字段時(shí),會(huì)將匿名字段的字段當(dāng)成該結(jié)構(gòu)體的字段處理。

package main
import (
    "encoding/json"
    "fmt"
)
type Student struct {
    Name  string `json:"_name"`
    Age   int    `json:"_age"`
    Top // 匿名字段
}
type Top struct {
    Sort int `json:"sort"`
    Score float64
    Class string
}
func main()  {
    s := Student{
        Name: "張三",
        Age:  18,
        Top:  Top{1,99.5,"一年級(jí)"},
    }
    json1, err := json.Marshal(s)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("json: %s \n",json1)
}
//輸出-> json: {"_name":"張三","_age":18,"sort":1,"Score":99.5,"Class":"一年級(jí)"}

4.JSON轉(zhuǎn)結(jié)構(gòu)體

JSON可以轉(zhuǎn)換成結(jié)構(gòu)體。同編碼一樣,json包是通過(guò)反射機(jī)制來(lái)實(shí)現(xiàn)解碼的,因此結(jié)構(gòu)體必須導(dǎo)出所轉(zhuǎn)換的字段,不導(dǎo)出的字段不會(huì)被json包解析。另外解析時(shí)不區(qū)分大小寫。

package main
import (
    "encoding/json"
    "fmt"
)
type Student struct {
    Name  string `json:"_name"`
    Age   int    `json:"_age"`
    Top // 匿名字段
}
type Top struct {
    Sort int `json:"sort"`
    Score float64
    Class string
}
func main(){
    student := Student{}
    js := `{"_name":"張三","_age":18,"sort":1,"Score":99.5,"Class":"一年級(jí)"}`
    err := json.Unmarshal([]byte(js), &student)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("v: %+v  t: %T \n",student,student)
}
// 輸出: v: {Name:張三 Age:18 Top:{Sort:1 Score:99.5 Class:一年級(jí)}}  t: main.Student

5.切片轉(zhuǎn)JSON

package main
import (
    "encoding/json"
    "fmt"
)
func main(){
    student := []string {
        "張三",
        "李四",
        "小米",
    }
    marshal, err := json.Marshal(student)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("v :%s T:%T",marshal,marshal)
}
// 輸出 v :["張三","李四","小米"] T:[]uint8

6.JSON轉(zhuǎn)切片

package main
import (
    "encoding/json"
    "fmt"
)
func main(){
    json1 := `["張三","李四","小米"]`
    var sc []string
    err := json.Unmarshal([]byte(json1), &sc)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Printf("v :%v T:%T",sc,sc)
}
// 輸出: v :[張三 李四 小米] T:[]string

以上就是Go語(yǔ)言學(xué)習(xí)之JSON編碼解析與使用的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)言JSON的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入理解go緩存庫(kù)freecache的使用

    深入理解go緩存庫(kù)freecache的使用

    go開(kāi)發(fā)緩存場(chǎng)景一般使用map或者緩存框架,為了線程安全會(huì)使用sync.Map或線程安全的緩存框架,本文就詳細(xì)的介紹了go緩存庫(kù)freecache,感興趣的可以了解一下
    2022-02-02
  • Go語(yǔ)言使用GORM操作數(shù)據(jù)庫(kù)使用指南

    Go語(yǔ)言使用GORM操作數(shù)據(jù)庫(kù)使用指南

    GORM(全稱為Go?Object?Relational?Mapping)是一個(gè)在Go語(yǔ)言中使用的輕量級(jí)的對(duì)象關(guān)系映射(ORM)庫(kù),本文主要為大家介紹了GORM操作數(shù)據(jù)庫(kù)具體方法,需要的可以參考一下
    2023-05-05
  • golang類型轉(zhuǎn)換之interface轉(zhuǎn)字符串string簡(jiǎn)單示例

    golang類型轉(zhuǎn)換之interface轉(zhuǎn)字符串string簡(jiǎn)單示例

    在我們使用Golang進(jìn)行開(kāi)發(fā)過(guò)程中,總是繞不開(kāi)對(duì)字符或字符串的處理,這篇文章主要給大家介紹了關(guān)于golang類型轉(zhuǎn)換之interface轉(zhuǎn)字符串string的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • 一文帶你徹底搞懂 Golang 中的方法(Methods)

    一文帶你徹底搞懂 Golang 中的方法(Methods)

    Golang 支持一些類似面向?qū)ο缶幊痰奶匦?,方法就其中之一,本文將詳?xì)介紹 Golang 中方法相關(guān)的知識(shí),感興趣的小伙伴跟著小編一起來(lái)學(xué)習(xí)吧
    2023-07-07
  • Golang中定時(shí)器的陷阱詳解

    Golang中定時(shí)器的陷阱詳解

    這篇文章主要給大家介紹了關(guān)于Golang中定時(shí)器陷阱的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用golang具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-09-09
  • golang 監(jiān)聽(tīng)服務(wù)的信號(hào),實(shí)現(xiàn)平滑啟動(dòng),linux信號(hào)說(shuō)明詳解

    golang 監(jiān)聽(tīng)服務(wù)的信號(hào),實(shí)現(xiàn)平滑啟動(dòng),linux信號(hào)說(shuō)明詳解

    這篇文章主要介紹了golang 監(jiān)聽(tīng)服務(wù)的信號(hào),實(shí)現(xiàn)平滑啟動(dòng),linux信號(hào)說(shuō)明詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-05-05
  • Go實(shí)現(xiàn)自動(dòng)解壓縮包以及讀取docx/doc文件內(nèi)容詳解

    Go實(shí)現(xiàn)自動(dòng)解壓縮包以及讀取docx/doc文件內(nèi)容詳解

    在開(kāi)發(fā)過(guò)程中,我們常常需要處理壓縮包和文檔文件。本文將介紹如何使用Go語(yǔ)言自動(dòng)解壓縮包和讀取docx/doc文件,需要的可以參考一下
    2023-03-03
  • Go語(yǔ)言字符串處理庫(kù)strings包詳解

    Go語(yǔ)言字符串處理庫(kù)strings包詳解

    本文詳細(xì)介紹了Go語(yǔ)言中的strings庫(kù)的使用方法,包括字符串的查找、替換、分割、比較、大小寫轉(zhuǎn)換等操作,strings庫(kù)是Go語(yǔ)言中非常重要且功能豐富的標(biāo)準(zhǔn)庫(kù),幾乎涵蓋了所有字符串處理的需求
    2024-09-09
  • Go語(yǔ)言實(shí)現(xiàn)對(duì)XML的讀取和修改

    Go語(yǔ)言實(shí)現(xiàn)對(duì)XML的讀取和修改

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言實(shí)現(xiàn)對(duì)XML的讀取和修改的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Golang爬蟲(chóng)框架colly使用淺析

    Golang爬蟲(chóng)框架colly使用淺析

    這篇文章主要介紹了Golang爬蟲(chóng)框架colly的使用,colly是Go實(shí)現(xiàn)的比較有名的一款爬蟲(chóng)框架,而且Go在高并發(fā)和分布式場(chǎng)景的優(yōu)勢(shì)也正是爬蟲(chóng)技術(shù)所需要的,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05

最新評(píng)論