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