以下是Go Playground演示我的问题:http://play.golang.org/p/2fq3Fg7rPg
基本上,我正在尝试JSON封送包含自定义类型包装uevent
的结构。使用$ cat /sys/class/net/enp0s25/device/uevent
DRIVER=e1000e
PCI_CLASS=20000
PCI_ID=8086:1502
PCI_SUBSYS_ID=17AA:21F3
PCI_SLOT_NAME=0000:00:19.0
MODALIAS=pci:v00008086d00001502sv000017AAsd000021F3bc02sc00i00
时,我得到了预期的结果,但只是在我的完整结构上调用json.RawMessage
不能按预期工作。有关具体示例,请参阅游乐场链接。
造成这种差异的原因是什么?
有没有办法让CustomType.MarshalJSON()
像我期望的那样工作?
答案 0 :(得分:1)
你的代码运行正常,你只有一个小bug。
// 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()
中做过),但它们需要保持一致。