go语言学习笔记 之 JSON

结构体序列化

package main

import (
	"encoding/json"
	"fmt"
)

type Cat struct {
	// 后面``中的内容是给字段加个别名,在json序列化时会序列化为后面的别名
	Name string `json:"name"`
	Age int `json:"age"`
	Color string `json:"color"`
}

func main() {
	c := Cat{
		Name:"加菲",
		Age:10,
		Color: "yellow",
	}
	// 这里如果不使用指针,调用会将结构体copy一份
	cjson, err := json.Marshal(&c)
	if err == nil{
		fmt.Println(string(cjson))
	}
}

结果

{"name":"加菲","age":10,"color":"yellow"}

json 转 结构体

package main

import (
	"encoding/json"
	"fmt"
)

type Cat struct {
	// 后面``中的内容是给字段加个别名,在json序列化时会序列化为后面的别名
	Name string `json:"name"`
	Age int `json:"age"`
	Color string `json:"color"`
}

func main() {
	jsonStr := "{\"name\":\"加菲\",\"age\":10,\"color\":\"yellow\"}"
	var c Cat
	err := json.Unmarshal([]byte(jsonStr), &c)
	if err == nil {
		fmt.Printf("名字=%v, 年龄=%v, 颜色=%v", c.Name, c.Age, c.Color)
	}
}

结果如下

名字=加菲, 年龄=10, 颜色=yellow

map转json

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	m := make(map[string]interface{})
	m["name"] = "小黑"
	m["age"] = 3
	m["color"] = "black"
	mjson, err := json.Marshal(m)
	if err == nil {
		fmt.Println(string(mjson))
	}
}

输出结果

{"age":3,"color":"black","name":"小黑"}

切片转json

package main

import (
	"encoding/json"
	"fmt"
)

func main() {
	s := make([]map[string]interface{}, 2)
	m1 := make(map[string]interface{})
	m1["name"] = "小黑"
	m1["age"] = 3
	m1["color"] = "black"
	m2 := make(map[string]interface{})
	m2["name"] = "加菲"
	m2["age"] = 10
	m2["color"] = "yellow"
	s[0] = m1
	s[1] = m2
	sjson, err := json.Marshal(s)
	if err == nil {
		fmt.Println(string(sjson))
	}
}

输出结果

[{"age":3,"color":"black","name":"小黑"},{"age":10,"color":"yellow","name":"加菲"}]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值