由于空字符串是Golang的零/默认值,因此string我决定将所有这些字段定义为interface{}相反.例如
type student struct {
FirstName interface{} `json:"first_name"`
MiddleName interface{} `json:"middle_name"`
LastName interface{} `json:"last_name"`
}
Run Code Online (Sandbox Code Playgroud)
如果该特定字段的值不可用,则我发送数据的应用程序需要null而不是空字符串.
这是正确的方法还是有人可以指点我比这更好的东西.
给定一个 go 结构
type Company struct {
ID int `json:"id"`
Abn sql.NullString `json:"abn,string"`
}
Run Code Online (Sandbox Code Playgroud)
当用这样的东西编组时
company := &Company{}
company.ID = 68
company.Abn = "SomeABN"
result, err := json.Marshal(company)
Run Code Online (Sandbox Code Playgroud)
结果是
{
"id": "68",
"abn": {
"String": "SomeABN",
"Valid": true
}
}
Run Code Online (Sandbox Code Playgroud)
想要的结果是
{
"id": "68",
"abn": "SomeABN"
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试明确说明 Abn 是一个字符串。
Abn sql.NullString `json:"abn,string"`
Run Code Online (Sandbox Code Playgroud)
这并没有改变结果。
您如何编组 sql.NullString 以便将输出展平以仅给出 go 中的值?
编辑
在阅读了/sf/users/577955451/和/sf/users/67613031/的答案后,我得到了类似的结果
package main
import (
"database/sql"
"encoding/json"
"reflect"
//"github.com/lib/pq"
)
/*
https://medium.com/aubergine-solutions/how-i-handled-null-possible-values-from-database-rows-in-golang-521fb0ee267
*/
type NullString sql.NullString …Run Code Online (Sandbox Code Playgroud)