2

我需要通过 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?不得不手动编写所有这些检查将是非常不愉快的。

4

2 回答 2

0

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

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

于 2013-02-03T08:54:36.400 回答
0

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

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

type House struct {
    Name    string    `json:"house_name"`
    PubDate time.Time `json:"pub_date,nodecode"`
}
于 2013-02-03T13:27:51.270 回答