MENU

Go 学习笔记:Json转换

September 9, 2021 • Golang

Go 语言是不能像JavaScript一样直接支持Json这种类型的,需要自己手动将Json转换为Go语言能支持的数据结构

Json转换为map

如果json内的字段是确定的,你可以这样写

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-09-05 18:36:02
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    str := `{"name":"dio", "age":"12"}`
    dict := make(map[string]string)
    err := json.Unmarshal([]byte(str), &dict)
    if err != nil {
        fmt.Println("ERR:", err)
    } else {
        fmt.Println(dict)
    }
}

如果不能确定,那就用interface来替代即可

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-09-05 18:39:55
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    str := `{"name":"dio", "age":12}`
    dict := make(map[string]interface{})
    err := json.Unmarshal([]byte(str), &dict)
    if err != nil {
        fmt.Println("ERR:", err)
    } else {
        // fmt.Println(dict["age"])
        fmt.Printf("%T\n", dict["age"])
    }
}

Json转换为切片

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-09-05 18:44:53
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    str := `["name", "value"]`
    dict := make([]string, 32)
    err := json.Unmarshal([]byte(str), &dict)
    if err != nil {
        fmt.Println("ERR:", err)
    } else {
        fmt.Println(dict[0])
        fmt.Printf("%T\n", dict)
    }
}

Json转结构体

Json转结构体的时候,需要先声明结构体

/*
 * @Author: NorthCityChen
 * @LastEditTime: 2021-09-05 18:50:37
 * @Description:
 * @Website: https://grimoire.cn
 * Copyright (c) NorthCityChen All rights reserved.
 */
package main

import (
    "encoding/json"
    "fmt"
)

type Dict struct {
    name  string
    age   int32
    bobby []string
}

func main() {
    str := `{"name": "dio", "age":12, "hobby":["Programming", "dancing"]}`
    dict := Dict{}
    err := json.Unmarshal([]byte(str), &dict)
    if err != nil {
        fmt.Println("ERR:", err)
    } else {
        fmt.Printf("%+v\n", dict)
        fmt.Printf("%T\n", dict)
    }
}
作者:NorthCity1984
出处:https://grimoire.cn/golang/go-json-translation.html
版权:本文《Go 学习笔记:Json转换》版权归作者所有
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任