防止元帅在结构的字符串字段上转义引号

Bli*_*Top 7 json go

我在解析以下结构时遇到问题,其中JsonData是存储在数据库中的JSON字符串.

type User struct {
    Id          uint64  `json:"user_id"`
    JsonData    string  `json:"data"`
}

user := &User {
    Id: 444,
    JsonData: `{"field_a": 73, "field_b": "a string"}`,
}
Run Code Online (Sandbox Code Playgroud)

如果我json.Marshal这个,它将逃避引号,但这将给我JSON:

{
    "user_id" : 444,
    "data": "{\"field_a\": 73, \"field_b\": \"a string\"}"
}
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉marshaller避免转义JsonData字符串并将其放在引号中,所以它看起来像这样?

{
    "user_id" : 444,
    "data": {"field_a": 73, "field_b": "a string"}
}
Run Code Online (Sandbox Code Playgroud)

我宁愿不跳过太多的箍,比如创建一个全新的类似用户的对象和/或解组/重新编组字符串等.

Ain*_*r-G 10

看起来像RawMessage就是你要找的:

RawMessage是一个原始编码的JSON对象.它实现了Marshaler和Unmarshaler,可用于延迟JSON解码或预先计算JSON编码.

游乐场:http://play.golang.org/p/MFNQlISy-o.