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

时间:2014-07-21 08:42:36

标签: 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"}`,
}

如果我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"}
}

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

2 个答案:

答案 0 :(得分:10)

好像您正在寻找RawMessage

  

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

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

答案 1 :(得分:0)

你也可以在字段上使用'string'标签,它会告诉编组人员该字段已经在JSON中:

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