首页 > 其他分享 >结构体与json

结构体与json

时间:2023-02-08 21:12:37浏览次数:49  
标签:string err Age json Name fmt 结构

json是js中的数据表示方法,后面为了标准,同时json也很方便就前后端都在使用

把结构体转换为json格式字符串

序列化

package main

import (
  "encoding/json"
  "fmt"
)

type person struct {
//此处要使用标识符,标识符开头大写,只有标识符才能在其他包中可见
  Name string
  Age  int
}

func main() {
  p1 := person{
    Name: "王往",
    Age:  1888,
  }
  b, err := json.Marshal(p1)
  if err != nil {
    fmt.Printf("Marshal failed, err:%v", err)
    return
  }
  fmt.Printf("%v\n", string(b))
  //这里程序返回的结果为:
  /*
  {"Name":"王往","Age":1888}
  */
}

首字母为什么要大写?

因为是用到了json包来进行序列化,但是不使用标识符就会导致json包无法接收到你当前程序中的结构体变量中的内容

如果想要json中的字段开头是小写可以使用下面的方法

type person struct {
  Name string `json:"name"` //注意此处name和:还有json之间不要有空格
  Age string `json:"age"`
}

func main() {
  p1 := person{
    Name: "王往",
    Age:  1888,
  }
  b, err := json.Marshal(p1)
  if err != nil {
    fmt.Printf("Marshal failed, err:%v", err)
    return
  }
  fmt.Printf("%v\n", string(b))
  //程序返回结果为:
  /*
  {"name":"王往","age":1888}
  */
}


把json格式的字符串转换为go语言的结构体

反序列化

package main

type person struct {
  Name string `json:"name"`
  Age int `json:"age"`
}
func main(){
  str := `{"name":"未来","age":18}`
  var p2 person
  json.Unmarshal([]byte(str),&p2)//这里要用地址传参,不使用地址传参相当于拷贝了一个新的p2,所以原来的p2是没有值的
  fmt.Println(p2)
  //这里输出的内容为:
  /*
  {李四 18}
  */
}

标签:string,err,Age,json,Name,fmt,结构
From: https://www.cnblogs.com/suknna/p/17103307.html

相关文章