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

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

 更新時(shí)間: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":{"打游戲","看動(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 無字段標(biāo)簽

結(jié)構(gòu)體轉(zhuǎn)換成JSON在開發(fā)中經(jīng)常會(huì)用到。encoding/json包是通過反射機(jī)制來實(shí)現(xiàn)編解碼的,<font color=red>因此結(jié)構(gòu)體必須導(dǎo)出所轉(zhuǎn)換的字段,沒有導(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)簽的語法
    Age   int    `json:"_age"`
    Class string `json:"-"` // 不解析
    Phone string `json:"phone"`
    Score float32 // 沒有標(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
  • 沒有標(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包是通過反射機(jī)制來實(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語言學(xué)習(xí)之JSON編碼解析與使用的詳細(xì)內(nèi)容,更多關(guān)于Go語言JSON的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論

平潭县| 达日县| 和龙市| 汶上县| 西乌| 湖州市| 崇信县| 玉树县| 隆尧县| 孙吴县| 宁夏| 得荣县| 蒙山县| 邛崃市| 四会市| 皋兰县| 宜君县| 邵阳县| 南通市| 秦安县| 长葛市| 内丘县| 南宁市| 永清县| 封丘县| 武威市| 庄河市| 耒阳市| 武山县| 尚义县| 深圳市| 永仁县| 常州市| 蓬莱市| 会同县| 新津县| 洪雅县| 宜兰县| 和静县| 绥德县| 江口县|