golang中json包序列化与反序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package main
 
import (
    "encoding/json"
    "fmt"
    "reflect"
)
 
type Info struct {
    // 结构体的字段,首字母必须大写,否则序列化时读取不到
    Title string
    Count int
}
type Address struct {
    // 想要序列化后的字段为小写,可以在结构体中写tag实现
    City string `json:"city"`
    Num  int    `json:"num"`
}
 
func main() {
    v1 := []interface{}{
        "武沛齐",
        123,
        true,
        3.14,
        map[string]interface{}{
            "name": "张三",
            "age":  28,
        },
        Address{City: "北京", Num: 888},
        Info{"python", 666},
    }
 
    // 序列化
    // 通过json序列化结构体类型,结构体的字段首字母必须大写,如果想序列化后的字段为小写,可以打个tag标签
    bret, _ := json.Marshal(v1)
    ret := string(bret)  // 序列化后的是[]byte字节切片,需要转换为字符串
    fmt.Println(ret, reflect.TypeOf(ret))
 
    // 反序列化
    content := `["武沛齐",123,true,3.14,{"age":28,"name":"张三"},{"city":"北京","num":888},{"Title":"python","Count":666}]`
    var dataSlice1 []interface{}
    json.Unmarshal([]byte(content), &dataSlice1)
    fmt.Println(dataSlice1, reflect.TypeOf(dataSlice1))
 
}

  

posted @   专职  阅读(111)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示