zoukankan      html  css  js  c++  java
  • Go语言结构体转json的坑

    Go语言结构体转json的坑

    标签(空格分隔): go

    json.Marshal()

    JSON输出的时候必须注意,只有导出的字段(首字母是大写)才会被输出,如果修改字段名,那么就会发现什么都不会输出,所以必须通过struct tag定义来实现。
    
    针对JSON的输出,我们在定义struct tag的时候需要注意的几点是:
    
     - 字段的tag是"-",那么这个字段不会输出到JSON
     - tag中带有自定义名称,那么这个自定义名称会出现在JSON的字段名中
     - tag中如果带有"omitempty"选项,那么如果该字段值为空,就不会输出到JSON串中
     - 如果字段类型是bool, string, int, int64等,而tag中带有",string"选项,那么这个字段在输出到JSON的时候会把该字段对应的值转换成JSON字符串
    

    代码示例

    package main
    
    import (
    	"encoding/json"
    	"fmt"
    )
    
    func main() {
    
    type UserInfo struct {
    	Id int
    	Name string
    	Address string
    }
    
    type Comiket struct {
    	id int
    	title string
    }
    
    type Test struct {
    	Id int `json:"-"`
    	Content string `json:"content"`
    	IsDel bool `json:",string"`
    	Type int `json:"type, omitempty"`
    }
    
    c := Comiket{1, "AS动漫游戏嘉年华"}
    v, error := json.Marshal(c)
    fmt.Println(string(v))
    fmt.Println(error)
    fmt.Println("------------------")
    
    User := UserInfo{1, "taylor", "USA"}
    b, err := json.Marshal(User)
    fmt.Println(string(b))
    fmt.Println(err)
    fmt.Println("------------------")
    
    t := Test{Id:1, Content:"hello world", IsDel:true}
    val, _ := json.Marshal(t)
    fmt.Println(string(val))
    

    }

  • 相关阅读:
    与生命晒跑
    关于你有一条未读短信的静态单页
    【微收藏】来自Twitter的自动文字补齐jQuery插件
    chrome 插件个人使用推介
    vscode中检测代码中的空白行并去除的方法
    FTP文件乱码导致的无法删除
    git操作遇到的几个问题
    一个srand、rand结果相同的问题
    【verilog】单周期MIPS CPU设计
    【verilog】多周期MIPS CPU设计
  • 原文地址:https://www.cnblogs.com/yanweifeng/p/10578000.html
Copyright © 2011-2022 走看看