zoukankan      html  css  js  c++  java
  • 简单了解Go语言JSON包

    基本说明

    JSON是一种轻量级的数据交换格式,易于人阅读和编写。同时也易于机器解析和生成

    JSON易于机器解析和生成,并有效的提升网络传输效率,通常程序在网络传输时会先将数据(结构体、map等)序列化成JSON字符串,到接收方得到JSON字符串时,在反序列化恢复成原来的数据类型(结构体、map等)。

    序列化

    JSON序列化,将有key-value结构的数据类型(比如结构体、map、切片)序列化成JSON字符串的操作

    // 结构体的序列化
    type Monster struct {
    	Name     string
    	Age      int
    	Birthday string
    	Sal      float64
    	Skill    string
    }
    
    func StructToJson() {
    	monster := Monster{
    		Name:     "牛魔王",
    		Age:      500,
    		Birthday: "2020-12-23",
    		Sal:      8000.0,
    		Skill:    "牛魔拳",
    	}
    
    	data, err := json.Marshal(&monster)
    
    	if err != nil {
    		fmt.Printf("序列号错误 err = %v 
    ", err)
    	}
    
    	fmt.Printf(string(data))
    }
    
    type Monster2 struct {
    	Name     string `json:"name"` // 使用tag,可以自定义json序列化后的名字,这是使用的反射机制
    	Age      int `json:"age"`
    	Birthday string
    	Sal      float64
    	Skill    string
    }
    
    // map的序列化
    func MapToJson() {
    	var a map[string]interface{}
    	a = make(map[string]interface{})
    
    	a["name"] = "tom"
    	a["age"] = 30
    	a["address"] = "English"
    
    	data, err := json.Marshal(a)
    	if err != nil{
    		fmt.Println(err)
    	}
    
    	fmt.Println(string(data))
    }
    
    
    // 切片的序列化
    func SliceToJson() {
    
    	var slice []map[string]interface{}
    	
    	var m1 map[string]interface{}
    	var m2 map[string]interface{}
    
    	m1 = make(map[string]interface{})
    	m2 = make(map[string]interface{})
    
    	m1["name"] = "tom"
    	m1["age"] = 30
    	m1["address"] = "English"
    
    	m2["name"] = "jack"
    	m2["age"] = 25
    	m2["address"] = "English"
    
    	slice = append(slice, m1, m2)
    
    	data, err := json.Marshal(slice)
    
    	if err != nil {
    		fmt.Println(err)
    		return
    	}
    
    	fmt.Println(string(data))
    }
    

    反序列化

    json反序列化是指,将json字符串反序列化成对应的数据类型(比如结构体、map、切片)的操作

    func JsonToStruct() {
    	str := "{"Name":"牛魔王","Age":500,"Birthday":"2020-12-23","Sal":8000,"Skill":"牛魔拳"}"
    
    	var monster Monster
    
    	err := json.Unmarshal([]byte(str), &monster)
    
    	if err == nil {
    		fmt.Println(monster)
    	}
    }
    
    func JsonToMap() {
    
    	str := "{"address":"English","age":30,"name":"tom"}"
    
    	var a map[string]interface{}
    
    	json.Unmarshal([]byte(str), &a)
    
    	fmt.Println(a)
    }
    
    func JsonToSlice() {
    
    	str := "[{"address":"English","age":30,"name":"tom"},{"address":"English","age":25,"name":"jack"}]"
    
    	var slice []map[string]interface{}
    
    	json.Unmarshal([]byte(str), &slice)
    
    	fmt.Println(slice)
    }
    
    
    1. 在反序列化一个json字符串时,要确保反序列化后的数据类型和原来序列化前的数据类型一致
    2. 如果json字符串是通过程序获取的,则不需要在的双引号转移处理
  • 相关阅读:
    The Brain vs Deep Learning Part I: Computational Complexity — Or Why the Singularity Is Nowhere Near
    unity3d NGUI多场景共用界面制作
    python第三方库系列之十九--python測试使用的mock库
    oracle之单行函数
    Andropid自己定义组件-坐标具体解释
    [WebGL入门]二,開始WebGL之前,先了解一下canvas
    【BZOJ2318】【spoj4060】game with probability Problem 概率DP
    苹果改版之后,关于隐私协议加入的问题解决方式
    Binary Tree Level Order Traversal II
    首届中国智慧城市协同创新峰会将于6月20日在大连隆重举行
  • 原文地址:https://www.cnblogs.com/lxlhelloworld/p/14286056.html
Copyright © 2011-2022 走看看