当前位置: 首页 > news >正文

第十章 json操作

第十章 json操作

文章目录

  • 第十章 json操作
    • 一、Marshal 序列化
    • 二、Unmarshal 反序列化
      • 1 已知数据解析
      • 2 未知数据解析
      • 3 json测试

一、Marshal 序列化

package main

import (
	"encoding/json"
	"fmt"
)
type Animal struct {
	Name  string `json:"name"`
	Order string `json:"order"`
}
func main() {
	var animals []Animal
	animals = append(animals, Animal{Name: "Platypus", Order: "Monotremata"})
	animals = append(animals, Animal{Name: "Quoll", Order: "Dasyuromorphia"})

	jsonStr, err := json.Marshal(animals)  // 也就是将可以转化成json的数据,进行json转换
	if err != nil {
		fmt.Println("error:", err)
	}

	fmt.Println(string(jsonStr))  // [{"name":"Platypus","order":"Monotremata"},{"name":"Quoll","order":"Dasyuromorphia"}]
}

不写tag也可以,使用tag起一个别名也好⛱️。

二、Unmarshal 反序列化

1 已知数据解析

package main

import (
    "encoding/json"
    "fmt"
)
type Animal struct {
    Name  string
    Order string
}
func main() {
    var jsonBlob = []byte(`[
        {"Name": "Platypus", "Order": "Monotremata"},
        {"Name": "Quoll",    "Order": "Dasyuromorphia"}
    ]`)

    var animals []Animal
    err := json.Unmarshal(jsonBlob, &animals)
    if err != nil {
        fmt.Println("error:", err)
    }
    fmt.Printf("%+v", animals)
}

2 未知数据解析

var f interface{}
b := []byte(`{"Name":"Wednesday","Age":6,"Parents":["Gomez","Morticia"]}`)

json.Unmarshal(b, &f)

for k, v := range f.(map[string]interface{}) {
    switch vv := v.(type) {
    case string:
        fmt.Println(k, "is string", vv)
    case int:
        fmt.Println(k, "is int ", vv)
    case float64:
        fmt.Println(k, "is float64 ", vv)
    case []interface{}:
        fmt.Println(k, "is array:")
        for i, j := range vv {
            fmt.Println(i, j)
        }
    }
}

3 json测试

package main

import (
	"encoding/json"
	"fmt"
)

type Base struct {
	Name  string   `json:"name"`
	Age   int      `json:"age"`
	Hobby []string `json:"hobby"`
}

type Person struct {
	BaseInfo Base
	ID       string
}

func main() {
	person := Person{BaseInfo: Base{"yangyi", 18, []string{"sing", "song"}}, ID: "123456789"}
	// 1 转化成json字符串
	jsonStr, err := json.Marshal(person)
	if err != nil {
		fmt.Println("json转换成功...")
	}
	fmt.Println(string(jsonStr))  // {"BaseInfo":{"Name":"yangyi","Age":18,"Hobby":["sing","song"]},"ID":"123456789"}

	// 2 json字符串反解析
	var person1 Person
	err = json.Unmarshal(jsonStr, &person1)
	if err != nil {
		fmt.Println("json字符串解析失败...")
	}
	fmt.Printf("%T\n", person1)  // main.Person
	fmt.Println(person1.BaseInfo.Hobby)  // [sing song]
}

相关文章:

  • java实现加密解密
  • 01_JDBC
  • 集合 Collection、Map
  • Qt炫酷仪表盘
  • 计算机网络:流量控制与可靠传输机制
  • Streamlit 最新进展分析
  • C++蓝桥杯实训篇(四)
  • Excel VBA 运行时错误1004’:方法‘Open’作用于对象‘Workbooks’时失败 的解决方法
  • openwrt软路由配置4--文件共享
  • ISIS路由引入
  • 【C++游戏引擎开发】第15篇:OpenGL中的纹理加载
  • 《组合优于继承:构建高内聚低耦合模块的最佳实践》
  • 如何把pdf的内容转化成结构化数据进行存储到mysql数据库
  • 【KWDB创作者计划】_KWDB应用之实战案例
  • java面试题带答案2025最新整理
  • 【动手学强化学习】番外7-MAPPO应用框架2学习与复现
  • 编译构建 WSO2 产品时的一些注意事项
  • Spring事务同步器在金融系统中的应用:从风控计算到交易投递
  • 车载通信架构 --- DOIP系统机制初入门
  • 五款AI论文工具,助力完成论文写作
  • 中国在建结构第一高楼“天津117大厦”将复工,预计2027年完工
  • 4月LPR保持不变:1年期3.1%,5年期以上3.6%
  • 全国登记在册民营企业超过5700万户
  • 对话地铁读书人|来自大学教授的科普:读书日也是版权日
  • 解读丨连续两日施压,特朗普为何着急让美联储降息
  • “走进电影”:虚拟现实电影产业有新进展