我正在嘗試將 JSON 解組到我的 Mail 結(jié)構(gòu),但 Go 在解析 html_tmpl 和 text_tmpl 字段時返回錯誤。我怎么解決這個問題?HtmlTmpl 字段來自:html, err := template.ParseFiles(pathToHTMLFile)這是您可以測試的基本示例package mainimport ( "encoding/json" "fmt" "html/template" "time")type Mail struct { Id string `json:"id"` Subject string `json:"subject"` From string `json:"from"` To string `json:"to"` Date time.Time `json:"date"` HtmlTmpl template.Template `json:"html_tmpl"` TextTmpl template.Template `json:"text_tmpl"` Context map[string]string `json:"context"`}func main() { mail := &Mail{} s := `{"id":"","subject":"Test mail","from":"support@example.com","to":"user@gmail.com","date":"0001-01-01T00:00:00Z","html_tmpl":{"Tree":{"Name":"template.html","ParseName":"template.html","Root":{"NodeType":11,"Pos":0,"Nodes":[{"NodeType":0,"Pos":0,"Text":"PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9InJ1Ij4KPGhlYWQ+Cgk8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbCIgY2hhcnNldD0iVVRGLTgiPgoJPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbD0xIj4KCTxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+Cgk8dGl0bGU+0J/RgNC+0LLQtdGA0LrQsCDRgdCy0Y/Qt9C4PC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KCTxzcGFuPg=="},{"NodeType":1,"Pos":298,"Line":10,"Pipe":{"NodeType":14,"Pos":298,"Line":10,"IsAssign":false,"Decl":null,"Cmds":[{"NodeType":4,"Pos":298,"Args":[{"NodeType":8,"Pos":298,"Ident":["msg"]}]}]}},{"NodeType":0,"Pos":305,"Text":"PC9zcGFuPgo8L2JvZHk+CjwvaHRtbD4="}]}}},"text_tmpl":{"Tree":{"Name":"template.txt","ParseName":"template.txt","Root":{"NodeType":11,"Pos":0,"Nodes":[{"NodeType":1,"Pos":2,"Line":1,"Pipe":{"NodeType":14,"Pos":2,"Line":1,"IsAssign":false,"Decl":null,"Cmds":[{"NodeType":4,"Pos":2,"Args":[{"NodeType":8,"Pos":2,"Ident":["msg"]}]}]}}]}}},"context":{"msg":"Hi!"}}` err := json.Unmarshal([]byte(s), mail) fmt.Println(err) fmt.Println(mail)}
1 回答
蕪湖不蕪
TA貢獻(xiàn)1796條經(jīng)驗 獲得超7個贊
template.Template不支持從 JSON 編組/解組。它是一個帶有未導(dǎo)出字段的結(jié)構(gòu),并且它沒有實現(xiàn)處理封送/解封邏輯的接口(例如json.Unmarshaler)。
您應(yīng)該做的是在您的 JSON 和結(jié)構(gòu)中包含源模板文本,并在解組源模板文本后,將其解析為后處理步驟。如果你想編組一個包含模板的結(jié)構(gòu),它應(yīng)該只包含源模板文本(template.Template字段應(yīng)該被標(biāo)記為省略,如json:"-")。
- 1 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報
0/150
提交
取消
