GO语方方处理JSON教程:Unmarshal解析JSON字符串

2023-02-0611:33:10编程语言入门到精通Comments1,814 views字数 2416阅读模式

Unmarshal解析JSON字符串

package main

import (
	"encoding/json"
	"fmt"
)

// 准备解析结构体
type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	// 准备JSON数据
	data := `{"name":"zhangsan","age":33}`

	// 解析JSON字符串
	var p Person
	json.Unmarshal([]byte(data), &p)

	// 查看解析结果
	fmt.Println(p.Name, p.Age)
}

Marshal将对象转换为JSON字符串

package main

import (
	"encoding/json"
	"fmt"
)

// 准备解析结构体
type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	// 准备对象
	p := Person{
		Name: "zs",
		Age:  22,
	}

	// 将对象转换为JSON字符串
	data, err := json.Marshal(p)
	if err != nil {
		panic(err)
	}

	// 查看解析结果
	fmt.Println(string(data))
}

将对象保存为JSON文件

package main

import (
	"encoding/json"
	"os"
)

// 准备解析结构体
type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	// 准备对象
	p := Person{
		Name: "zs",
		Age:  22,
	}

	// 创建文件
	f, err := os.Create("tmp.json")
	if err != nil {
		panic(err)
	}

	// 写入JSON
	encodeJson := json.NewEncoder(f)
	err = encodeJson.Encode(p)
	if err != nil {
		panic(err)
	}
}

读取JSON文件为对象

package main

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

// 准备解析结构体
type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	// 打开文件
	f, err := os.Open("tmp.json")
	if err != nil {
		panic(err)
	}

	// 读取JSON
	decodeJson := json.NewDecoder(f)
	var p Person
	err = decodeJson.Decode(&p)
	if err != nil {
		panic(err)
	}

	// 查看读取结果
	fmt.Println(p.Name, p.Age)
}

封装便捷方法

通过前面的学习,我们应该能够掌握:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/30719.html

  • 将Go对象转换为JSON字符串
  • 将JSON字符串转换为Go对象
  • 将Go对象保存为JSON文件
  • 将JSON文件加载为Go对象

有了这四个核心功能以后,我们可以进行简单的封装,可以设计如下方法:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/30719.html

  • toJson:将Go对象转换为JSON字符串
  • fromJson:将JSON字符串转换为Go对象
  • writeJson:将Go对象保存为JSON文件
  • readJson:将JSON文件读取为Go对象

示例代码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/30719.html

package main

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

// 准备解析结构体
type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

// ● toJson:将Go对象转换为JSON字符串
func toJson(obj interface{}) ([]byte, error) {
	return json.Marshal(obj)
}

// ● fromJson:将JSON字符串转换为Go对象
func fromJson(data string, obj interface{}) error {
	return json.Unmarshal([]byte(data), obj)
}

// ● writeJson:将Go对象保存为JSON文件
func writeJson(filename string, obj interface{}) error {
	// 创建文件
	f, err := os.Create(filename)
	if err != nil {
		return err
	}

	// 写入JSON
	encodeJson := json.NewEncoder(f)
	err = encodeJson.Encode(obj)
	if err != nil {
		return err
	}

	return nil
}

// ● readJson:将JSON文件读取为Go对象
func readJson(filename string, obj interface{}) error {
	// 打开文件
	f, err := os.Open(filename)
	if err != nil {
		return err
	}

	// 读取JSON
	decodeJson := json.NewDecoder(f)
	err = decodeJson.Decode(obj)
	if err != nil {
		return err
	}

	return nil
}

func main() {
	// 转换JSON字符串
	p := Person{
		Name: "zs",
		Age:  22,
	}
	v, _ := toJson(p)
	fmt.Println(string(v))

	// 读取JSON字符串
	var p1 Person
	_ = fromJson(string(v), &p1)
	fmt.Println(p1.Name, p1.Age)

	// 保存为JSON文件
	filename := "tmp1.json"
	_ = writeJson(filename, &p1)

	// 读取JSON文件
	var p2 Person
	_ = readJson(filename, &p2)
	fmt.Println(p2.Name, p2.Age)
}
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ymba/30719.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ymba/30719.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定