Go JSON

Go语言内置了对JSON编码和解码的支持,它还支持自定义数据类型。

Marshal函数用于将Go数据类型转换为JSON格式。

Marshal函数的语法是:

func Marshal(v interface{}) ([]byte, error)

Marshal返回v的JSON编码。

布尔值转换为JSON布尔值。浮点数、整数和数字转换为JSON数字。映射的键类型必须是字符串、整数类型或实现了encoding.TextMarshaler接口。

使用Unmarshal函数来解码JSON。

Unmarshal函数的语法是:

func Unmarshal(data []byte, v interface{}) error

Unmarshal将解码JSON编码的值,并将结果存储在v指向的值中。如果v为nil或不是指针,则Unmarshal返回InvalidUnmarshalError。

我们还可以自定义存储在结构字段的"json"键下的字段。我们可以在字段名称后面加上逗号分隔的选项列表。例如:

Field int 'json:"myName"' // 出现在JSON中的键名为"myName"。
Field int 'json:"myName,omitempty' // 如果字段的值为空,则从对象中省略该字段。
Field int 'json:"-"' // 该包忽略此字段。

Go JSON示例1

package main  
import "encoding/json"  
import "fmt"  
  
func main() {  
    bolType, _ := json.Marshal(false) //boolean值  
    fmt.Println(string(bolType))  
    intType, _ := json.Marshal(10) // 整数值  
    fmt.Println(string(intType))  
    fltType, _ := json.Marshal(3.14) // 浮点数值  
    fmt.Println(string(fltType))  
    strType, _ := json.Marshal("JavaTpoint") // 字符串值  
    fmt.Println(string(strType))  
    slcA := []string{"sun", "moon", "star"} //切片值  
    slcB, _ := json.Marshal(slcA)  
    fmt.Println(string(slcB))  
    mapA := map[string]int{"sun": 1, "moon": 2} //映射值  
    mapB, _ := json.Marshal(mapA)  
    fmt.Println(string(mapB))  
}  

输出:

false
10
3.14
"JavaTpoint"
["sun","moon","star"]
{"moon":2,"sun":1}

Go JSON示例2(自定义数据类型)

package main  
  
import (  
    "encoding/json"  
    "fmt"  
    "os"  
)  
  
type Response1 struct {  
    Position   int  
    Planet []string  
}  
type Response2 struct {  
    Position   int      'json:"position"'  
    Planet []string 'json:"planet"'  
}  
  
func main()  {  
    res1A := &Response1{  
        Position:   1,  
        Planet: []string{"mercury", "venus", "earth"}}  
    res1B, _ := json.Marshal(res1A)  
    fmt.Println(string(res1B))  
  
    res2D := &Response2{  
        Position:   1,  
        Planet: []string{"mercury", "venus", "earth"}}  
    res2B, _ := json.Marshal(res2D)  
    fmt.Println(string(res2B))  
  
  
    byt := []byte('{"pi":6.13,"place":["New York","New Delhi"]}')  
    var dat map[string]interface{}  
    if err := json.Unmarshal(byt, &dat); err != nil {  
        panic(err)  
    }  
    fmt.Println(dat)  
    num := dat["pi"].(float64)  
    fmt.Println(num)  
    strs := dat["place"].([]interface{})  
    str1 := strs[0].(string)  
    fmt.Println(str1)  
      
      
    str := `{"Position": 1, "Planet": ["mercury", "venus"]}`  
    res := Response2{}  
    json.Unmarshal([]byte(str), &res)  
    fmt.Println(res)  
    fmt.Println(res.Planet[1])  
    enc := json.NewEncoder(os.Stdout)  
    d := map[string]string{"1":"mercury" , "2": "venus"}  
    enc.Encode(d)  
  
}  

输出:

{"Position":1,"Planet":["mercury","venus","earth"]}
{"position":1,"planet":["mercury","venus","earth"]}
map[pi:6.13 place:[New York New Delhi]]
6.13
New York
{1 [mercury venus]}
venus
{"1":"mercury","2":"venus"}

标签: Golang, Golang下载, Golang教程, Golang技术, Golang学习, Golang学习教程, Golang语言, Golang开发, Golang入门教程, Golang进阶教程, Golang高级教程, Golang面试题, Golang笔试题, Golang编程思想