golang json处理struct未导出成员

golang json处理struct未导出成员,第1张

概述我们用golang的json来marshal一个结构体的时候,结构体的未导出成员将无法被json访问,也就是不会出现json编码的结果里(也就是小写的成员没法导出) 这个是由于技术的上问题引起的:golang的结构体里的成员的名字如果以小写字母开头,那么其他的包是无法访问的,也就是json无法访问我们的结构体里小写字母开头的成员 这个可以有两种方法解决 1. struct的成员用大写开头,然后加


我们用golang的Json来marshal一个结构体的时候,结构体的未导出的成员将无法被Json访问,也就是不会出现Json编码的结果里(也就是小写的成员没法导出)

这个是由于技术的上问题引起的:golang的结构体里的成员的名字如果以小写字母开头,那么其他的包是无法访问的,也就是Json无法访问我们的结构体里小写字母开头的成员


这个可以有两种方法解决

1. struct的成员用大写开头,然后加tag

2. 实现Json.Marshaler接口


第一种方法比较常见这儿就不详细展开了

第二种方法如下

http://play.golang.org/p/AiTwUOWkiT

@H_301_25@package mainimport "fmt"import "enCoding/Json"func main() { var s S s.a = 5 s.b[0] = 3.123 s.b[1] = 111.11 s.b[2] = 1234.123 s.c = "hello" s.d[0] = 0x55 j,_ := Json.Marshal(s) fmt.Println(string(j))}type S struct { a int b [4]float32 c string d [12]byte}func (this S) MarshalJsON() ([]byte,error) { return Json.Marshal(map[string]interface{}{ "a": this.a,"b": this.b,"c": this.c,"d": this.d,})}

输出:

@H_301_25@{"a":5,"b":[3.123,111.11,1234.123,0],"c":"hello","d":[85,0]}

也就是结构体实现MarshalJsON() ([]byte,error)函数即可,在这个函数里导出你想要导出的成员就可以了。

这样就可以正常的使用Json.Marshal之类的函数了

总结

以上是内存溢出为你收集整理的golang json处理struct未导出成员全部内容,希望文章能够帮你解决golang json处理struct未导出成员所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1289926.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存