最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2023年02月14日 11:04:19   作者:猿碼記  
這篇文章主要為大家詳細(xì)介紹了Go語言中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":{"打游戲","看動漫"},
    }
    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":["打游戲","看動漫"]}  類型: []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":["打游戲","看動漫"]}`
    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:[打游戲 看動漫]] T: map[string][]string
*/

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

3.1 無字段標(biāo)簽

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

package main
import (
    "encoding/json"
    "fmt"
)
type Student struct {
    Name string
    Age int
    Class string
    phone string //小寫字段,則不是會導(dǎo)出
}
func main()  {
    s := Student{
        Name:  "張三",
        Age:   17,
        Class: "三年級",
        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":"三年級"}

3.2 有字段標(biāo)簽

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

package main
import (
    "encoding/json"
    "fmt"
)
// 定義一個學(xué)生結(jié)構(gòu)體
type Student struct {
    Name  string `json:"_name"` // 字段標(biāo)簽的語法
    Age   int    `json:"_age"`
    Class string `json:"-"` // 不解析
    Phone string `json:"phone"`
    Score float32 // 沒有標(biāo)簽時,則用字段名
}
func main()  {
    s := Student{
        Name:  "張三",
        Age:   17,
        Class: "三年級",
        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)簽名時,標(biāo)簽名會作為key
  • 沒有標(biāo)簽時,則會使用字段名。
  • 有標(biāo)簽名時,但是標(biāo)簽名的值為-,則不會導(dǎo)出

3.3 匿名字段

json包在解析匿名字段時,會將匿名字段的字段當(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,"一年級"},
    }
    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":"一年級"}

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

JSON可以轉(zhuǎn)換成結(jié)構(gòu)體。同編碼一樣,json包是通過反射機制來實現(xiàn)解碼的,因此結(jié)構(gòu)體必須導(dǎo)出所轉(zhuǎn)換的字段,不導(dǎo)出的字段不會被json包解析。另外解析時不區(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":"一年級"}`
    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:一年級}}  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語言學(xué)習(xí)之JSON編碼解析與使用的詳細(xì)內(nèi)容,更多關(guān)于Go語言JSON的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 一文帶你讀懂Golang?sync包之sync.Mutex

    一文帶你讀懂Golang?sync包之sync.Mutex

    sync.Mutex可以說是sync包的核心了,?sync.RWMutex,?sync.WaitGroup...都依賴于他,?本章我們將帶你一文讀懂sync.Mutex,快跟隨小編一起學(xué)習(xí)一下吧
    2023-04-04
  • 使用Go語言玩轉(zhuǎn) RESTful API 服務(wù)

    使用Go語言玩轉(zhuǎn) RESTful API 服務(wù)

    RESTful API是一種基于HTTP協(xié)議的API設(shè)計風(fēng)格,遵循REST架構(gòu)風(fēng)格,這篇文章主要為大家介紹了如何通過Go語言構(gòu)建RESTful API服務(wù),有需要的可以了解下
    2025-02-02
  • golang常用庫之pkg/errors包第三方錯誤處理包案例詳解

    golang常用庫之pkg/errors包第三方錯誤處理包案例詳解

    這篇文章主要介紹了golang常用庫之pkg/errors包第三方錯誤處理包,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • Golang 實現(xiàn)Socket服務(wù)端和客戶端使用TCP協(xié)議通訊

    Golang 實現(xiàn)Socket服務(wù)端和客戶端使用TCP協(xié)議通訊

    這篇文章主要介紹了Golang 實現(xiàn)Socket服務(wù)端和客戶端使用TCP協(xié)議通訊,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Golang學(xué)習(xí)筆記(二):類型、變量、常量

    Golang學(xué)習(xí)筆記(二):類型、變量、常量

    這篇文章主要介紹了Golang學(xué)習(xí)筆記(二):類型、變量、常量,本文講解了基本類型、保留字、變量、常量、枚舉、運算符、指針、分組聲明等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實例詳解

    Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實例詳解

    這篇文章主要為大家介紹了Golang基礎(chǔ)之函數(shù)使用(參數(shù)傳值)實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • go?mod?tidy報錯解決方法詳解

    go?mod?tidy報錯解決方法詳解

    這篇文章主要為大家介紹了go?mod?tidy報錯解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • golang容易導(dǎo)致內(nèi)存泄漏的6種情況匯總

    golang容易導(dǎo)致內(nèi)存泄漏的6種情況匯總

    內(nèi)存泄漏是我們在生產(chǎn)環(huán)境中必須面臨的問題,下面這篇文章主要給大家介紹了關(guān)于golang容易導(dǎo)致內(nèi)存泄漏的6種情況,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 基于golang如何實現(xiàn)error工具包詳解

    基于golang如何實現(xiàn)error工具包詳解

    Go 語言使用 error 類型來返回函數(shù)執(zhí)行過程中遇到的錯誤,下面這篇文章主要給大家介紹了關(guān)于如何基于golang實現(xiàn)error工具包的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-09-09
  • go-zero熔斷機制組件Breaker接口定義使用解析

    go-zero熔斷機制組件Breaker接口定義使用解析

    這篇文章主要為大家介紹了go-zero熔斷機制組件Breaker接口定義使用解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05

最新評論

会同县| 海阳市| 南丹县| 沈丘县| 同心县| 博乐市| 东台市| 望江县| 杭州市| 罗田县| 双峰县| 通榆县| 云霄县| 枣强县| 双江| 平谷区| 新营市| 山阳县| 元谋县| 江安县| 乌恰县| 上思县| 昌乐县| 九寨沟县| 馆陶县| 洪泽县| 县级市| 惠安县| 赤壁市| 仁怀市| 定日县| 襄垣县| 巴东县| 普定县| 马龙县| 清镇市| 南华县| 互助| 棋牌| 刚察县| 苗栗县|