Go语言学习之旅十二--json和正则表达式

1.JSON
简介

  • 轻量级数据传输格式

  • 总体上分为两种:

    • 一种是JSONObject(json对象)
    {"key":value,"key":value}
    
    • 一种是JSONArrayP(json数组),包含多个JSONObject
    [{"key":"value"},{"key":"value"}]
    
  • key是string类型,value可以是string类型(值被双引号包含),也可以是数值或布尔类型等,也可以是JSONObject类型或JSONArray类型

  • 可以使用Go语言标准库中 encoding/json 包下的Marshal()或Unmarshal()把结构体对象转换成[]byte或把[]byte中信息写入到结构体对象中

    • 在转换过程中结构体属性tag中定义了json中的key,属性的值就是json中的value
    • 如果属性没有配置tag,属性就是json中的key
  • 属性的tag可以进行下面配置

package main

import (
	"encoding/json"
	"fmt"
)

type  User1 struct{
   
	Name string
	Age int
}
func main() {
   
u:=User1{
   "张三",18}
b,_:=json.Marshal(u)
fmt.Println(string(b))
u1:=new(User1)
json.Unmarshal(b,u1)
fmt.Println(u1)
}

效果截图:
在这里插入图片描述
看第一行输出的数据,key分别是属性Name和Age,value分别是张三和18,张三是string类型,所以输出时会带上"",而18是int型,所以输出时没有""。这就对应了上面的:“在转换过程中结构体属性tag中定义了json中的key,属性的值就是json中的value

  • 如果属性没有配置tag,属性就是json中的key”。且结构体的属性不能小写,如果把Name和Age换成name和阿哥,则会显示不出数据,因为无法完成转换:
  • 在这里插入图片描述
    代码示例:
  • 结构体和[]byte进行转换代码比较简单
    • 只要满足键值对形式的类型都可以转换成标准的json格式
package main

import (
	"encoding/json"
	"fmt"
	"html/template"
	"net/http"
)

type  User2 struct{
   
	Name string
	Age int
}

func exit1(w http.ResponseWriter,r *http.Request)  {
   
	t,_:=template.ParseFiles("view/index5.html")
	t.Execute(w,nil)
}
func showuser(w http.ResponseWriter,r *http.Request)  {
   
	us:=make([]User2,0)
	us=append(us,User2{
   "张三",12})
	us=append(us,User2{
   "李四",13})
	us=append(us,User2{
   "王五",14})
	//w.Header().Set("Content-type", "application/json;charset=utf-8")
	b,_:=json.Marshal(us)
	fmt.Fprintln(w,b)

}
func main() {
   
	server:=http.Server{
   Addr:":8090"}
	http.HandleFunc("/",exit1)
	http.HandleFunc("/showUser",showuser)
	server.ListenAndServe()
}

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值