首页 > 代码库 > golang json处理struct未导出成员
golang json处理struct未导出成员
我们用golang的json来marshal一个结构体的时候,结构体的未导出的成员将无法被json访问,也就是不会出现json编码的结果里(也就是小写的成员没法导出)
这个是由于技术的上问题引起的:golang的结构体里的成员的名字如果以小写字母开头,那么其他的包是无法访问的,也就是json无法访问我们的结构体里小写字母开头的成员
这个可以有两种方法解决
1. struct的成员用大写开头,然后加tag
2. 实现json.Marshaler接口
第一种方法比较常见这儿就不详细展开了
第二种方法如下
http://play.golang.org/p/AiTwUOWkiT
package main import "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, }) }
输出:
{"a":5,"b":[3.123,111.11,1234.123,0],"c":"hello","d":[85,0,0,0,0,0,0,0,0,0,0,0]}
也就是结构体实现MarshalJSON() ([]byte, error)函数即可,在这个函数里导出你想要导出的成员就可以了。
这样就可以正常的使用json.Marshal之类的函数了
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。