JSON Marshaling产生了意想不到的结果

时间:2015-07-15 17:59:51

标签: json go sqlx

以下是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()像我期望的那样工作?

1 个答案:

答案 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()中做过),但它们需要保持一致。

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