json - 结构中的 json 标记真的需要编码吗?

标签 json go marshalling

我有兴趣了解是否有办法做到这一点:

type Example struct {
  Name    string   `json:"name"`
  Value   string   `json:"value"`
}

变成这样:
type Example struct {
  Name    string
  Value   string
}

并且仍然允许 JSON 编码/解码?是否有一个库或一种方法可以自动假设或注入(inject)这些标签,而不必在每个结构字段中都明确表示?

最佳答案

默认情况下,它将被编码为

{ 
    "Name": "",
    "Value": ""
}

但是 go 是在 go 中编写的,如果你真的想要没有标签的小写,你可以'fork' encoding/json包,将其重新创建为您自己的包并更改 encode.go 中的行为(go 1.13 中的第 1151 行):
// Record found field and index sequence.    
if name != "" || !sf.Anonymous || ft.Kind() != reflect.Struct {
        tagged := name != ""
        if name == "" {
           name = sf.Name <-- here, for example to strings.ToLower(sf.Name)
        }
        ....

我不建议你这样做,但它有效:)

关于json - 结构中的 json 标记真的需要编码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58240704/

相关文章:

javascript - 从文本文件值创建 JSON 对象

string - 查找 []byte slice 中所有出现的字符串

C# 调用非托管 C 驱动程序 (dll)

c# - 在 C# 中编码 C 结构

javascript - Mustache JS 模板 - 如何在脚本标记字符串中嵌入变量?

php - 如何在 Swift 或 Php 中将核心数据编码为 JSON(不带斜线)

java - jQuery 模板和 Backbone.js

go - 您如何使用他们的 API 判断文件是否已从 Google Drive 中删除?

go - Golang中使用database/sql包调用QueryRow方法超时

c# - Marshal.AllocHGlobal(0) - 为什么这不返回 IntPtr.Zero