我需要通过JSON导出一些大型结构,并收回JSON字符串以更新只有的属性。
让我们有以下结构:
type House struct {
Name string `json:"name"`
Rooms int `json:"rooms_count"`
Owner *Owner `json:"-"`
}
使用encoding/json
编码将导致类似
{"name":"some name", "rooms_count":5}
我现在得到这个JSON字符串:
{"name":"some other name", "rooms_count":7, Owner:{something...}}
用户想要更改每个属性。不允许Owner
,因为它未导出。但我只想允许更改rooms_count
。有没有办法说某些属性应该与Encoder
一起导出,但Decoder
不能使用?必须手动编写所有这些检查是非常不愉快的。
答案 0 :(得分:0)
在您的确切情况下,只需解组到新结构并执行currentStruct.Rooms = newStruct.Rooms
就是您想要的。
对于那种类型的自定义编组,没有一种完全直接的方法可以做到这一点。你能得到的最好的是两个相同的结构,不同的场合有不同的标签,还有一些反射来执行它们之间的转换。
答案 1 :(得分:0)
我为encoding / json包创建了一个补丁,并打开了ticket。
它只为结构添加了2个标记选项,分别忽略Encoder
和Decoder
中的结构字段。所有两个字段都被编码/导出但只有Name
被解码/更新的示例:
type House struct {
Name string `json:"house_name"`
PubDate time.Time `json:"pub_date,nodecode"`
}