gpt4 book ai didi

json - 如何使用 html 模板解码结构?

转载 作者:行者123 更新时间:2023-12-01 20:24:14 24 4
gpt4 key购买 nike

我正在尝试将 JSON 解码到我的 Mail 结构,但 Go 在解析 html_tmpl 和 text_tmpl 字段时返回错误。 我怎么解决这个问题?

HtmlTmpl 字段来自:

html, err := template.ParseFiles(pathToHTMLFile)

这是您可以测试的基本示例
package main

import (
"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)
}

最佳答案

template.Template 不支持从 JSON 编码/解码。它是一个带有未导出字段的结构,并且它没有实现处理编码(marshal)/解封逻辑的接口(interface)(例如 json.Unmarshaler )。

您应该做的是在您的 JSON 和结构中包含源模板文本,并在解码源模板文本后,将其解析为后处理步骤。如果你想编码一个包含模板的结构,它应该只包含源模板文本( template.Template 字段应该被标记为省略,如 json:"-" )。

关于json - 如何使用 html 模板解码结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59809280/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com