Go - JSON

Go - JSON 首页 / Golang入门教程 / Go - JSON

Go具有对JSON编码和解码的内置支持。它还支持自定义数据类型。

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

链接:https://www.learnfk.comhttps://www.learnfk.com/go/go-json.html

来源:LearnFk无涯教程网

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

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

JSON的解码是使用Unmarshal函数完成的。

解组函数的语法为:

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

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

我们还可以自定义存储在struct字段标签中" json"键下的字段。我们可以使用该字段的名称,然后是逗号分隔的选项列表。喜欢

Field int 'json:"myName"'//以键“myName”的形式出现在 JSON 中。
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)//integer 值
	fmt.Println(string(intType))
	fltType, _ := json.Marshal(3.14) //float 值
	fmt.Println(string(fltType))
	strType, _ := json.Marshal("Learnfk")//string 值
	fmt.Println(string(strType))
	slcA := []string{"sun", "moon", "star"} //slice 值
	slcB, _ := json.Marshal(slcA)
	fmt.Println(string(slcB))
	mapA := map[string]int{"sun": 1, "moon": 2} //map 值
	mapB, _ := json.Marshal(mapA)
	fmt.Println(string(mapB))
}

输出:

无涯教程网

false
10
3.14
"Learnfk"
["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"}

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

Java性能调优实战 -〔刘超〕

分布式协议与算法实战 -〔韩健〕

WebAssembly入门课 -〔于航〕

分布式金融架构课 -〔任杰〕

代码之丑 -〔郑晔〕

徐昊 · TDD项目实战70讲 -〔徐昊〕

超级访谈:对话毕玄 -〔毕玄〕

Go进阶 · 分布式爬虫实战 -〔郑建勋〕

后端工程师的高阶面经 -〔邓明〕

好记忆不如烂笔头。留下您的足迹吧 :)