【问题标题】:How to json marshal a int type value to null如何 json 将 int 类型值封送为 null
【发布时间】:2021-05-01 15:21:02
【问题描述】:

因为 go 有 int 类型的默认值,所以如果我定义了一个 int 类型,并将其推入 struct/map/slice... 然后j, _ := json.Marshal(resource),它将是0
有什么办法可以把它变成json字符串中的null

例如:

    var a int
    b := []int{a, 1, 2}
    s, _ := json.Marshal(b)

我对@9​​87654325@ 的预期输出是[null, 1, 2]

【问题讨论】:

  • a 不为空。它的值为0。
  • 您希望[]int{0, 1, 2} 的输出是什么?
  • “有没有办法让它在 json 字符串中变成 null ?” -- 不,不是用内置的int 类型。您必须使用其他类型,可以是 Go nil(例如 *intinterface{})。或者您需要定义自己的类型,知道值 0 应该在编组为 json 时转换为 null(通过实现 json.Unmarshaler 接口)。

标签: go


【解决方案1】:

一个简单的方法是使用*int而不是int

package main

import (
    "encoding/json"
    "fmt"
)

func createIntPtr(x int) *int {
    return &x
}

func main() {
    var a *int
    b := []*int{a, createIntPtr(1), createIntPtr(2)}
    s, _ := json.Marshal(b)
    fmt.Println(string(s))
}

输出:[null,1,2]

游乐场:https://play.golang.org/p/qnLjsx35p82

*int 会更合适,因为它的默认值是nil。 所以,当它被编组为 json 时,它会变成 null,就像你期望的那样。

帮助函数createIntPtr 只是一种将整数文字添加到整数指针数组的便捷方法,因为 Go 不允许获取整数常量的地址。

【讨论】:

    猜你喜欢
    • 2020-12-13
    • 2016-03-12
    • 2020-11-18
    • 1970-01-01
    • 2020-06-20
    • 1970-01-01
    • 2017-06-11
    • 1970-01-01
    • 2020-10-22
    相关资源
    最近更新 更多