json - Golang 序列化/反序列化一个空数组而不是 null

标签 json rest serialization go deserialization

有没有办法序列化结构的空数组属性(非空)并将其反序列化回空数组(再次非空)?

考虑到空数组实际上是指向null的指针,在序列化/反序列化之后,空数组和指向null的指针之间的可感知初始差异是否完全丢失?

最糟糕的实际情况是,当我第一次向我的 REST 客户端显示一个空数组属性时,作为 json "att":[],并且在缓存注册到 redis 并恢复它之后,相同的属性是向我的客户显示为“att”:null,导致契约(Contract)破裂并且造成很多困惑。

总结:在序列化/反序列化之后,可以像 json 空数组一样显示客户 2 地址 => https://play.golang.org/p/TVwvTWDyHZ

最佳答案

我很确定你能做到的最简单的方法就是改变你的线路

var cust1_recovered Customer

cust1_recovered := Customer{Addresses: []Address{}}

除非我读错了你的问题,否则我相信这是你想要的输出:

ORIGINAL  Customer 2 {
  "Name": "Customer number 2",
  "Addresses": []
}
RECOVERED Customer 2 {
  "Name": "Customer number 2",
  "Addresses": []
}

这里是一个验证的 Playground :https://play.golang.org/p/T9K1VSTAM0

这里的限制,正如@mike 指出的那样,如果 Addresses 在编码之前真的是 nil ,一旦你解码,你就不会得到 json 等效的 null,但最终会得到一个空列表。

关于json - Golang 序列化/反序列化一个空数组而不是 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33183071/

相关文章:

java - Hibernate 不会完全刷新实体子项

c# - 将平面字典序列化为多子对象 JSON

java - 使用 Ehcache 自定义序列化

java - 无法构建这个复杂的 JSON 结构

.net - 在 ASP.NET 中使用 session 的优点和缺点

c# - 与身份验证方法作斗争

objective-c - initWithCoder :?中NSCoder有什么用(Cocoa和Cocoa Touch)

JavaScript 混合内容解决方法

php - ESP8266 读取 JSON,但不读取 PHP 文件

javascript - 无效的 JSON、意外的 token