编组结构后,JSON输出的格式包含很多转义符和双引号。
我尝试使用编组器,编组,RawMessages来强制删除字符串的一部分。
data := ChannelData{}
if err := rows.Scan(&data.Idx, &data.MciIdx, &data.Channel, &data.MatchIdx, &data.MatchCx, &data.StartTs, &data.EndTs, &data.Len, &data.MatchStartTs, &data.MatchEndTs, &data.MatchLen, &data.Happened, &data.Instance); err != nil {
log.Printf("%+v\n", rows)
log.Error().Err(err).Msg("unable to scan mysql data into struct")
continue
}
jsonD, err := json.Marshal(&data)
if err != nil {
log.Error().Err(err).Msg("cannot marshal data")
}
log.Debug().Msg(string(jsonD))
type ChannelData struct {
Idx string `json:"idx,string"`
MciIdx string `json:"mci_idx,string"`
Channel string `json:"channel,string"`
MatchIdx string `json:"match_idx,string"`
MatchCx string `json:"match_cx,string"`
StartTs string `json:"start_ts,string"`
EndTs string `json:"end_ts,string"`
Len string `json:"len,string"`
MatchStartTs string `json:"match_start_ts,string"`
MatchEndTs string `json:"match_end_ts,string"`
MatchLen string `json:"match_len,string"`
Happened string `json:"happened,string"`
Instance string `json:"instance,string"`
}
我得到:
{“ level”:“调试”,“ time”:“ 2019-07-10T20:12:09Z”,“ message”:“ {\” idx \“:\” \\“ 8931741865 \\” \ “,\” mci_idx \“:\” \\“ 107265043 \\” \“,\”频道\“:\” \\“ WPVIDT \\” \“,\” match_idx \“:\” \\“ 36028797060807935 \\“ \”,\“ match_cx \”:\“ \\” \\“ \”,\“ start_ts \”:\“ \\” 2019-07-10 17:57:59 \\“ \”, \“ end_ts \”:\“ \\” 2019-07-10 17:58:14 \\“ \”,\“ len \”:\“ \\” 00:00:15 \\“ \”,\ “ match_start_ts \”:\“ \\” 2019-06-05 07:14:52 \\“ \”,\“ match_end_ts \”:\“ \\” 2019-06-05 07:15:08 \\“ \“,\” match_len \“:\” \\“ 00:00:16 \\” \“,\”发生了\“:\” \\“ 2019-07-10 17:58:16 \\” \ “,\” instance \“:\” \\“ 172.17.65.80 \\” \“}”}
我希望它采用JSON格式:
{“ level”:“调试”,“ time”:“ 2019-07-10T20:12:09Z”,“ message”:“ {” idx“:” 8931741865“,” mci_idx“:” 107265043“, “ channel”:“ WPVIDT” ...}“}
答案 0 :(得分:1)
要删除双引号,可以使用strconc.Unquote
很高兴看到一行数据的示例,看看是否还有其他缺失。
但是从这里可用的内容中,如果字符串json.Marshal
中有引号,将不会自动删除它们。您可以使用上述命令删除引号。
Look at This Example for Unquote
。
您可能只需要在ChannelData
结构上编写一个方法即可取消引用每个字段。
func (c *ChannelData) unquote() {
c.Idx = strconv.Unquote(c.Idx)
.
.
.
}