解析JSON文件

Go解析JSON用到了encoding/json库,用json.Unmarshal解码json,用json.Marshal编码json字符。

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

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

//定义配置文件解析后的结构
type SubMedia struct {
Url string
Thumb string `json:"thumb"`
}

type News struct {
Title string
Media SubMedia
}

func main() {
JsonParse := NewJsonStruct()
v := News{}
JsonParse.Load("./json_parse.json", &v)
fmt.Println(v.Title)
fmt.Println(v.Media.Thumb)
}

type JsonStruct struct {
}

func NewJsonStruct() *JsonStruct {
return &JsonStruct{}
}

func (js *JsonStruct) Load(filename string, v interface{}) {
//ReadFile函数会读取文件的全部内容,并将结果以[]byte类型返回
data, err := os.ReadFile(filename)
if err != nil {
return
}

//读取的数据为json格式,需要进行解码
err = json.Unmarshal(data, v)
if err != nil {
return
}
}

生成JSON文件

package main

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

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

func main() {
user := &User{
UserName: "Jack",
NickName: "Ma",
Email: "xxxxx@qq.com",
}

data, err := json.Marshal(user)
if err != nil {
fmt.Printf("json.Marshal failed,err:", err)
return
}

fmt.Printf("%s\n", string(data))

file, _ := os.Create("json_write.json")
defer file.Close()
file.Write(data)
}

参考链接

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