What is the way to get the json field names of this struct ?

type example struct {
    Id          int `json:"id"`
    CreatedAt   string `json:"created_at"`
    Tag         string `json:"tag"`
    Text        string `json:"text"`
    AuthorId    int `json:"author_id"`
}

我try 使用此功能打印字段:

func (b example) PrintFields() {
    val := reflect.ValueOf(b)
    for i := 0; i < val.Type().NumField(); i++ {
        fmt.Println(val.Type().Field(i).Name)
    }
}

Of course I get :

Id
CreatedAt
Tag
Text
AuthorId

But I would like something like :

id
created_at
tag
text
author_id

推荐答案

您可以使用StructTag类型来获取标签.我链接的文档包含示例,请查找它们,但您的代码可能如下所示

func (b example) PrintFields() {
  val := reflect.ValueOf(b)
  for i := 0; i < val.Type().NumField(); i++ {
     fmt.Println(val.Type().Field(i).Tag.Get("json"))
  }
}

NOTE The json tag format supports more than just field names, such as omitempty or string, so if you need an approach that takes care of that too, further improvements to the PrintFields function should be made:

  1. 我们需要判断json标签是否为-(即json:"-")
  2. we need to check if name exists and isolate it

比如:

func (b example) PrintFields() {
  val := reflect.ValueOf(b)
  for i := 0; i < val.Type().NumField(); i++ {
    t := val.Type().Field(i)
    fieldName := t.Name

    switch jsonTag := t.Tag.Get("json"); jsonTag {
    case "-":
    case "":
        fmt.Println(fieldName)
    default:
        parts := strings.Split(jsonTag, ",")
        name := parts[0]
        if name == "" {
            name = fieldName
        }
        fmt.Println(name)
    }
  }
}

Json相关问答推荐

try 将文本标记放置在条形图上的同一高度

如何循环访问多个子数组并在单个JSON中检索数据点

由于无效的UTF-8开始字节0xa0,JSON被拒绝,但编码似乎有效

JQ如何获取特定子元素的所有父母

如何使用GoFr返回XML响应?

织女星-没有循环的动画条形图第二部分(实际上是织女星)

褐煤面积图中的分选问题

将PostgreSQL转换为JSON对象

使用jq过滤复杂json对象中的数据

如何将 JSON 文本作为参数传递给 powershell?

jq搜索特定字符串并输出对应的父值

使用 jq Select 键:值并输出为数组

当值包含ansible中的字符串时解析json值

如何在 jQuery 中循环遍历 JSON 数组?

JSON.NET 中特定对象的自定义转换

在 Postgres 中向 JSON 对象添加元素

在android中使用GSON解析带有动态key和value的JSON

来自 Gson 的 JSON 字符串:删除双引号

有没有一种快速的方法可以在文本编辑器中将 JavaScript 对象转换为有效的 JSON?

如何在 postgresql 9.3 中循环 JSON 数组