json.RawMessage的封送处理

json.RawMessage的封送处理,json,go,Json,Go,请在这里找到代码 我将JSON数据保留为原始消息,但无法将其解码。我需要对包含的结构进行封送和解封,但我希望仍然能够获得JSON字段 代码: 输出: json.RawMessage上的方法都使用指针接收器,这就是为什么您不能使用它们中的任何一个;你没有指针 从执行的意义上说,这“有效”,但这可能不是您想要的策略: 基本上你需要这个: type Data struct { Name string Id int Json *json.RawMessage } 然后通过程

请在这里找到代码

我将JSON数据保留为原始消息,但无法将其解码。我需要对包含的结构进行封送和解封,但我希望仍然能够获得JSON字段

代码: 输出:
json.RawMessage上的方法都使用指针接收器,这就是为什么您不能使用它们中的任何一个;你没有指针

从执行的意义上说,这“有效”,但这可能不是您想要的策略:

基本上你需要这个:

type Data struct {
    Name string
    Id   int
    Json *json.RawMessage
}

然后通过程序的其余部分传播该更改。什么。。。你到底想做什么?

jorellis的答案对于Go 1.8之前的版本是正确的

Go 1.8及更新版本将正确处理指针和非指针json.RawMessage的编组


修复提交:

非常感谢。我了解指针接收器,并在本地进行了尝试。可能犯了个错误。我使用这个存储库来存储一些缓存的值,这些值只是作为http json响应所需要的。再次感谢您的帮助。在encoding/xml package中是否有与json.RawMessage等效的内容?@codefeak有点晚了,但是encoding/xml package允许您直接对Token进行编码,或者使用“、innerxml”标记来解组“raw”xml字节。
b %s {"Name":"World","Id":2}
b2 %s {"Name":"Hello","Id":1,"Json":"eyJOYW1lIjoiV29ybGQiLCJJZCI6Mn0="}
d.Json %s "eyJOYW1lIjoiV29ybGQiLCJJZCI6Mn0="
Error %s json: cannot unmarshal string into Go value of type main.Data2
Data2 %+v { 0}
type Data struct {
    Name string
    Id   int
    Json *json.RawMessage
}