为JSON编码器/解码器“发布”了不同的结构属性

时间:2013-02-02 22:38:47

标签: json encoding go decoding

我需要通过JSON导出一些大型结构,并收回JSON字符串以更新只有的属性。

让我们有以下结构:

type House struct {
    Name   string  `json:"name"`
    Rooms  int     `json:"rooms_count"`
    Owner  *Owner  `json:"-"`
}

使用encoding/json编码将导致类似

的JSON字符串
{"name":"some name", "rooms_count":5}

我现在得到这个JSON字符串:

{"name":"some other name", "rooms_count":7, Owner:{something...}}

用户想要更改每个属性。不允许Owner,因为它未导出。但我只想允许更改rooms_count。有没有办法说某些属性应该与Encoder一起导出,但Decoder不能使用?必须手动编写所有这些检查是非常不愉快的。

2 个答案:

答案 0 :(得分:0)

在您的确切情况下,只需解组到新结构并执行currentStruct.Rooms = newStruct.Rooms就是您想要的。

对于那种类型的自定义编组,没有一种完全直接的方法可以做到这一点。你能得到的最好的是两个相同的结构,不同的场合有不同的标签,还有一些反射来执行它们之间的转换。

答案 1 :(得分:0)

我为encoding / json包创建了一个补丁,并打开了ticket

它只为结构添加了2个标记选项,分别忽略EncoderDecoder中的结构字段。所有两个字段都被编码/导出但只有Name被解码/更新的示例:

type House struct {
    Name    string    `json:"house_name"`
    PubDate time.Time `json:"pub_date,nodecode"`
}