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