我在解析以下结构时遇到问题,其中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"}`,
}
如果我json.Marshal这个,它将逃脱引号,但这将给我JSON:
{
"user_id" : 444,
"data": "{\"field_a\": 73, \"field_b\": \"a string\"}"
}
有没有办法让marshaller避免转义JsonData字符串并将其放在引号中,所以它看起来像这样?
{
"user_id" : 444,
"data": {"field_a": 73, "field_b": "a string"}
}
我宁愿不跳过太多的箍,比如创建一个全新的类似用户的对象和/或解组/重新编组字符串等。
答案 0 :(得分:10)
好像您正在寻找RawMessage:
RawMessage是一个原始编码的JSON对象。它实现了Marshaler和Unmarshaler,可用于延迟JSON解码或预先计算JSON编码。
答案 1 :(得分:0)
你也可以在字段上使用'string'标签,它会告诉编组人员该字段已经在JSON中:
type User struct {
Id uint64 `json:"user_id"`
JsonData string `json:"data,string"`
}