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))
    

    }

  • 相关阅读:
    linux设备驱动编写_tasklet机制(转)
    Class create, device create, device create file (转)
    android MTK驱动背光唤醒流程
    sysfs接口函数的建立_DEVICE_ATTR(转)
    Android图形显示之硬件抽象层Gralloc(hal 转)
    misc设备
    Android 呼吸灯流程分析
    Linux输入子系统(转)
    Oracle与MySQL的比较[内容来自网络]
    Oracle数据库分区相干知识点
  • 原文地址:https://www.cnblogs.com/yanweifeng/p/10578000.html
Copyright © 2011-2022 走看看