
本文介绍如何在 go web 应用中解析含嵌套账户数组的 json 数据,通过 go 模板(html/template)安全高效地渲染 html 表格,并将用户多个 bankname 拼接为逗号分隔字符串显示。
本文介绍如何在 go web 应用中解析含嵌套账户数组的 json 数据,通过 go 模板(html/template)安全高效地渲染 html 表格,并将用户多个 bankname 拼接为逗号分隔字符串显示。
在 Go Web 开发中,直接在前端 JavaScript 中处理 JSON 并拼接字符串虽可行,但违背服务端渲染原则,且易引入 XSS 风险。推荐做法是:在 Go 后端完成数据结构化与字符串拼接,再通过 html/template 安全注入到 HTML 中。
1. 定义结构体并解析 JSON
首先,根据你的 JSON 结构定义 Go 结构体(注意字段首字母大写以导出,且添加 json 标签):
type Account struct {
ID string `json:"Id"`
BankName string `json:"BankName"`
BankDetails string `json:"BankDetails"`
AccNum string `json:"AccNum"`
}
type User struct {
ID string `json:"Id"`
Name string `json:"Name"`
Accounts []Account `json:"Account"`
}然后解析 JSON 字符串(例如从数据库或 API 获取):
var userData User
err := json.Unmarshal([]byte(jsonStr), &userData)
if err != nil {
log.Fatal(err)
}2. 实现 BankName 拼接逻辑(推荐封装为方法)
为提升可读性与复用性,可在 User 类型上定义一个辅助方法:
立即学习“go语言免费学习笔记(深入)”;
func (u User) BankNames() string {
var names []string
for _, acc := range u.Accounts {
if acc.BankName != "" { // 过滤空值,避免出现 ",,Deutsche"
names = append(names, strings.TrimSpace(acc.BankName))
}
}
return strings.Join(names, ",")
}✅ 注意:strings.TrimSpace 清除 " Deutsche" 中的前导空格;strings.Join 安全拼接,无额外逗号。
3. 使用 HTML 模板渲染表格
创建模板文件 users.html:
<!DOCTYPE html>
<html>
<head><title>User Accounts</title></head>
<body>
<table border="1">
<thead>
<tr><th>Name</th><th>Has_Account_in</th></tr>
</thead>
<tbody>
{{range .}}
<tr>
<td>{{.Name}}</td>
<td>{{.BankNames}}</td>
</tr>
{{end}}
</tbody>
</table>
</body>
</html>在 HTTP 处理函数中执行渲染:
t, _ := template.ParseFiles("users.html")
http.HandleFunc("/users", func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/html; charset=utf-8")
// 假设 users 是已解析并处理好的 []User 切片
if err := t.Execute(w, users); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
})4. 关键注意事项
- ✅ 永远使用 html/template(而非 text/template):自动转义 HTML 特殊字符(如 <, &),防止 XSS。
- ⚠️ 避免在模板中使用 strings.Join 或复杂逻辑:Go 模板不支持原生字符串操作函数,应在后端预处理。
- ? 若需去重(如 HDFC 出现两次只显示一次),可在 BankNames() 方法中加入 map[string]bool 去重逻辑。
- ? 若数据来自数据库,建议直接用 sql.Scanner 或 ORM(如 GORM)映射为结构体,而非手动解析 JSON。
通过以上方式,你既能保持 Go 代码的类型安全与可维护性,又能生成清晰、安全、高性能的 HTML 表格输出。


















