Go 处理 json


json to struct

import (
    "testing"
    "encoding/json"
)

// 这里对应的 N 和 A 不能为小写,首字母必须为大写,这样才可对外提供访问,具体 json 匹配是通过后面的 tag 标签进行匹配的,与 N 和 A 没有关系
// tag 标签中 json 后面跟着的是字段名称,都是字符串类型,要求必须加上双引号
type Person struct {
    N string     `json:"name"`
    A int        `json:"age"`
}

func TestStruct2Json(t *testing.T) {
    jsonStr := `{
        "name":"liangyongxing",
        "age":12
    }`
    var person Person
    json.Unmarshal([]byte(jsonStr), &person)
    t.Log(person)
}

struct to json

import (
    "testing"
    "encoding/json"
)

func TestStruct2Json(t *testing.T) {
    p := Person{
        Name: "liangyongxing",
        Age: 29,
    }
    t.Logf("Person 结构体打印结果:%v", p)
    // Person 结构体转换为对应的 json
    jsonBytes, err := json.Marshal(p)
    if err != nil {
        t.Fatal(err)
    }
    t.Logf("转换为 json 串打印结果:%s", string(jsonBytes))
}

json to map

import (
    "testing"
    "encoding/json"
)

func TestJson2Map(t *testing.T) {
    jsonStr := `{
        "name":"liangyongxing",
        "age":12
    }`
    var mapResult map[string]interface{}
    // 使用 json.Unmarshal(data []byte, v interface{}) 进行转换,返回 error 信息
    if err := json.Unmarshal([]byte(jsonStr), &mapResult); err != nil {
        t.Fatal(err)
    }
    t.Log(mapResult)
}

map to json

import (
    "testing"
    "encoding/json"
)

func TestMap2Json(t *testing.T) {
    mapInstance := make(map[string]interface{})
    mapInstance["Name"] = "liang637210"
    mapInstance["Age"] = 28
    mapInstance["Address"] = "北京昌平区"
    jsonStr, err := json.Marshal(mapInstance)
    if err != nil {
        t.Fatal(err)
    }

    t.Logf("Map2Json 得到 json 字符串内容:%s", jsonStr)
}
分享:

评论