Go语言学习笔记(十四)

Go语言学习笔记(十四)


一、JSon

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

JSON是一个标记符的序列。这套标记符包含六个构造字符、字符串、数字和三个字面名。
JSON是一个序列化的对象或数组。
  1. 六个构造字符:
begin-array = ws %x5B ws ; [ 左方括号
begin-object = ws %x7B ws ; { 左大括号
end-array = ws %x5D ws ; ] 右方括号
end-object = ws %x7D ws ; } 右大括号
name-separator = ws %x3A ws ; : 冒号
value-separator = ws %x2C ws ; , 逗号
  1. 在这六个构造字符的前或后允许存在无意义的空白符(ws):
ws = *%x20 /; 空间
%x09 /; 水平标签
%x0A /; 换行或换行
%x0D); 回程
  1. JSON的值:
1 JSON的构成: ws 值 ws [1] 
2值可以是对象、数组、数字、字符串或者三个字面值(false、null、true)中的一个。值中的字面值中的英文必须使用小写。

JSON 与 JS 对象的关系

JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
例如

var obj = {a: 'Hello', b: 'World'};
var json = '{"a": "Hello", "b": "World"}';

使用json表达

{
    "name": "中国",
    "province": [{
        "name": "黑龙江",
        "cities": {
            "city": ["哈尔滨", "大庆"]
        }
    }, {
        "name": "广东",
        "cities": {
            "city": ["广州", "深圳", "珠海"]
        }
    }, {
        "name": "台湾",
        "cities": {
            "city": ["台北", "高雄"]
        }
    }, {
        "name": "新疆",
        "cities": {
            "city": ["乌鲁木齐"]
        }
    }]
}

JSON 简单的语法格式和清晰的层次结构容易阅读。

二、结构体,map,切片的序列化

结构体

package main

import (
	"encoding/json"
	"fmt"
)

type Monster struct {
	Name     string
	Age      int
	Birthday string
	Sal      float64
}

func testStruct() {
	monster = Monster{
		Name:     "牛魔王",
		Age:      500,
		Birthday: "2011",
		Sal:      8000.0,
	}
	data, err := json.Marshal(&monster)
	if err != nil {
		fmt.Println("序列错误 err=%v\n", err)
	}
	fmt.Println("monster序列化后=%v\n", string(data))
}
func main() {
	testStruct()
}

map序列化

func testMap() {
	var a map[string]interface{}
	a = make(map[string]interface{})
	a["name"] = "红孩儿"
	a["age"] = "30" 
	a["address"] = "洪崖洞"
	data, err := json.Marshal(map)
	if err != nil {
		fmt.Println("序列错误 err=%v\n", err)
	}
	fmt.Println("a map 序列化后%v\n", string(data))
}

对切片序列化

func testSlice() {
	var slice []map[string]interface{}
	var m1 map[string]interface{}
	m1 = make(map[string]interface{})
	m1["name"] = "jack"
	m1["age"] = "20"
	m1["address"] = "en"
	data, err := json.Marshal(slice)
	if err != nil {
		fmt.Println("序列错误 err=%v\n", err)
	}
	fmt.Println("切片序列化后=%v\n", string(data))
}

对基本数据序列化

func testFloat64() {
	var num1 float64 = 2345.67
	data, err := json.Marshal(slice)
	if err != nil {
		fmt.Println("序列错误 err=%v\n", err)
	}
	fmt.Println("切片序列化后=%v\n", string(data))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值