zoukankan      html  css  js  c++  java
  • json序列化和反序列化

    序列化

    package main
    import (
        "fmt"
        "encoding/json"
    )
    
    //定义一个结构体
    type Monster struct {
        Name string `json:"monster_name"` //反射机制
        Age int `json:"monster_age"`
        Birthday string //....
        Sal float64
        Skill string
    }
    
    
    
    func testStruct() {
        //演示
        monster := Monster{
            Name :"牛魔王",
            Age : 500 ,
            Birthday : "2011-11-11",
            Sal : 8000.0,
            Skill : "牛魔拳",
        }
    
        //将monster 序列化
        data, err := json.Marshal(&monster) //..
        if err != nil {
            fmt.Printf("序列号错误 err=%v
    ", err)
        }
        //输出序列化后的结果
        fmt.Printf("monster序列化后=%v
    ", string(data))
    
    }
    
    //将map进行序列化
    func testMap() {
        //定义一个map
        var a map[string]interface{}
        //使用map,需要make
        a = make(map[string]interface{})
        a["name"] = "红孩儿"
        a["age"] = 30
        a["address"] = "洪崖洞"
    
        //将a这个map进行序列化
        //将monster 序列化
        data, err := json.Marshal(a)
        if err != nil {
            fmt.Printf("序列化错误 err=%v
    ", err)
        }
        //输出序列化后的结果
        fmt.Printf("a map 序列化后=%v
    ", string(data))
    
    }
    
    //演示对切片进行序列化, 我们这个切片 []map[string]interface{}
    func testSlice() {
        var slice []map[string]interface{}
        var m1 map[string]interface{}
        //使用map前,需要先make
        m1 = make(map[string]interface{})
        m1["name"] = "jack"
        m1["age"] = "7"
        m1["address"] = "北京"
        slice = append(slice, m1)
    
        var m2 map[string]interface{}
        //使用map前,需要先make
        m2 = make(map[string]interface{})
        m2["name"] = "tom"
        m2["age"] = "20"
        m2["address"] = [2]string{"墨西哥","夏威夷"}
        slice = append(slice, m2)
    
        //将切片进行序列化操作
        data, err := json.Marshal(slice)
        if err != nil {
            fmt.Printf("序列化错误 err=%v
    ", err)
        }
        //输出序列化后的结果
        fmt.Printf("slice 序列化后=%v
    ", string(data))
        
    }
    
    //对基本数据类型序列化,对基本数据类型进行序列化意义不大
    func testFloat64() {
        var num1 float64 = 2345.67
    
        //对num1进行序列化
        data, err := json.Marshal(num1)
        if err != nil {
            fmt.Printf("序列化错误 err=%v
    ", err)
        }
        //输出序列化后的结果
        fmt.Printf("num1 序列化后=%v
    ", string(data))
    }
    
    func main() {
        //演示将结构体, map , 切片进行序列号
        testStruct()
        testMap()
        testSlice()//演示对切片的序列化
        testFloat64()//演示对基本数据类型的序列化
    }
    monster序列化后={"monster_name":"牛魔王","monster_age":500,"Birthday":"2011-11-11","Sal":8000,"Skill":"牛魔拳"}
    a map 序列化后={"address":"洪崖洞","age":30,"name":"红孩儿"}
    slice 序列化后=[{"address":"北京","age":"7","name":"jack"},{"address":["墨西哥","夏威夷"],"age":"20","name":"tom"}]
    num1 序列化后=2345.67

    反序列化:

    package main
    import (
        "fmt"
        "encoding/json"
    )
    
    //定义一个结构体
    type Monster struct {
        Name string  
        Age int 
        Birthday string //....
        Sal float64
        Skill string
    }
    
    
    //演示将json字符串,反序列化成struct
    func unmarshalStruct() {
        //说明str 在项目开发中,是通过网络传输获取到.. 或者是读取文件获取到
        str := "{"Name":"牛魔王~~~","Age":500,"Birthday":"2011-11-11","Sal":8000,"Skill":"牛魔拳"}"
    
        //定义一个Monster实例
        var monster Monster
    
        err := json.Unmarshal([]byte(str), &monster)
        if err != nil {
            fmt.Printf("unmarshal err=%v
    ", err)
        }
        fmt.Printf("反序列化后 monster=%v monster.Name=%v 
    ", monster, monster.Name)
    
    }
    //将map进行序列化
    func testMap() string {
        //定义一个map
        var a map[string]interface{}
        //使用map,需要make
        a = make(map[string]interface{})
        a["name"] = "红孩儿~~~~~~"
        a["age"] = 30
        a["address"] = "洪崖洞"
    
        //将a这个map进行序列化
        //将monster 序列化
        data, err := json.Marshal(a)
        if err != nil {
            fmt.Printf("序列化错误 err=%v
    ", err)
        }
        //输出序列化后的结果
        //fmt.Printf("a map 序列化后=%v
    ", string(data))
        return string(data)
    
    }
    
    //演示将json字符串,反序列化成map
    func unmarshalMap() {
        //str := "{"address":"洪崖洞","age":30,"name":"红孩儿"}"
        str := testMap()
        //定义一个map
        var a map[string]interface{} 
    
        //反序列化
        //注意:反序列化map,不需要make,因为make操作被封装到 Unmarshal函数
        err := json.Unmarshal([]byte(str), &a)
        if err != nil {
            fmt.Printf("unmarshal err=%v
    ", err)
        }
        fmt.Printf("反序列化后 a=%v
    ", a)
    
    }
    
    //演示将json字符串,反序列化成切片
    func unmarshalSlice() {
        str := "[{"address":"北京","age":"7","name":"jack"}," + 
            "{"address":["墨西哥","夏威夷"],"age":"20","name":"tom"}]"
        
        //定义一个slice
        var slice []map[string]interface{}
        //反序列化,不需要make,因为make操作被封装到 Unmarshal函数
        err := json.Unmarshal([]byte(str), &slice)
        if err != nil {
            fmt.Printf("unmarshal err=%v
    ", err)
        }
        fmt.Printf("反序列化后 slice=%v
    ", slice)
    }
    
    func main() {
    
        unmarshalStruct()
        unmarshalMap()
        unmarshalSlice()
    }
    反序列化后 monster={牛魔王~~~ 500 2011-11-11 8000 牛魔拳} monster.Name=牛魔王~~~ 
    反序列化后 a=map[address:洪崖洞 age:30 name:红孩儿~~~~~~]
    反序列化后 slice=[map[address:北京 age:7 name:jack] map[address:[墨西哥 夏威夷] age:20 name:tom]]
  • 相关阅读:
    HAProxy+keepalived+MySQL 实现MHA中slave集群负载均衡的高可用
    mysql高可用架构之MHA,haproxy实现读写分离详解
    bootstrap全局css样式
    响应式与bootstrap
    jquery3
    jquery2
    jquery
    client,offset,scroll系列
    javascript-BOM
    JavaScript-DOM续
  • 原文地址:https://www.cnblogs.com/sunlong88/p/11203190.html
Copyright © 2011-2022 走看看