JSON反序列化

Go解析JSON用到了encoding/json库。
json.Unmarshal可以把字符串(字节)转为Struct。
json.Marshal可以把Struct转为字符串(字节)。

要解析的测试文件内容:

{
    "title":"标题",
    "media":{
      "url":"http://www.xxx.com/1.mp4",
      "thumb":"缩略图"
    }
  }

解析程序代码:

package main

import (
	"encoding/json"
	"fmt"
	"os"
)

// 定义JSON数据结构

type SubMedia struct {
	Url   string `json:"url"`
	Thumb string `json:"thumb"`
}

type News struct {
	Title string   `json:"title"`
	Media SubMedia `json:"media"`
}

func main() {
	var news News
	// 读取文件
	data, _ := os.ReadFile("test.json")
	// JSON解析
	_ = json.Unmarshal(data, &news)
	// 输出结果
	fmt.Println(news.Title)
	fmt.Println(news.Media.Thumb)
}

JSON序列化
package main

import (
	"encoding/json"
	"fmt"
	"os"
)

// 定义数据结构

type User struct {
	UserName string `json:"user_name"`
	NickName string `json:"nickname"`
	Email    string `json:"email"`
}

func main() {
	user := &User{
		UserName: "Jack",
		NickName: "Ma",
		Email:    "xxxxx@qq.com",
	}
	// 序列化
	data, _ := json.Marshal(user)
	// 查看结果
	fmt.Printf("%s\n", string(data))
	// 写入数据
	file, _ := os.Create("json_write.json")
	defer file.Close()
	_, _ = file.Write(data)
}

解析二维数组JSON
package main

import (
	"encoding/json"
	"fmt"
	"os"
)

func main() {
	data, err := os.ReadFile("data.json")
	if err != nil {
		fmt.Println("读取文件失败")
	}
	out := make([][]string, 0)
	err = json.Unmarshal(data, &out)
	if err != nil {
		fmt.Println("解析错误")
	}
	fmt.Println(out[0], out[1])
}

data.json内容是:

[["test1"],["test2", "test3"]]
[][]string[]interface{}[][]interface{}
参考链接

https://studygolang.com/static/pkgdoc/pkg/encoding_json.htm