0

这是一个演示我的问题的 Go Playground:http ://play.golang.org/p/2fq3Fg7rPg

本质上,我正在尝试 JSON 编组一个包含自定义类型 wrapping 的结构json.RawMessage。使用时,CustomType.MarshalJSON()我得到了预期的结果,但仅调用json.Marshal我的完整结构并不能按预期工作。有关具体示例,请参见操场链接。

是什么导致了这种差异?

有没有办法json.Marshal像我期望的那样工作?

4

1 回答 1

1

您的代码工作正常,您只有一个小错误。

// MarshalJSON returns the *j as the JSON encoding of j.
func (j JsonText) MarshalJSON() ([]byte, error) {
    return j, nil
} // note i modified this so the receiver isn't a pointer

您的代码不起作用,因为这是您对包装 JsonText 的数据类型的定义;

// Example struct I want to marshal and unmarshal
type TestData struct {
    Field1 JsonText `json:"field_1"`
}

但只有*JsonText类型在您的代码中实现了封送拆收器接口。因此,您可以在任一位置更改类型(我在 中所做的MarshalJSON()),但它们需要保持一致。

在操场; http://play.golang.org/p/NI_z3bQx7a

于 2015-07-15T18:14:50.880 回答