Parsing 如何在Golang中将多个数据对象传递给HTML模板
我将表的所有行作为json返回变量Parsing 如何在Golang中将多个数据对象传递给HTML模板,parsing,templates,go,interface,Parsing,Templates,Go,Interface,我将表的所有行作为json返回变量pdata,并将其解组为接口对象。 我有一个user struct的实例,我想将它与未组分的json数据一起传递给render函数,并使用html模板中的字段参数{{.fieldname}}访问它 if uuid != "" { pdata, err := getProduct() if err != nil { fmt.Println(err) } type Prdata struct { P
pdata
,并将其解组为接口对象。
我有一个user struct的实例,我想将它与未组分的json数据一起传递给render函数,并使用html模板中的字段参数{{.fieldname}}
访问它
if uuid != "" {
pdata, err := getProduct()
if err != nil {
fmt.Println(err)
}
type Prdata struct {
Puid string `json:"puid"`
Pname string `json:"pname"`
Quantity string `json:"quantity"`
Price string `json:"price"`
Image string `json:"image"`
}
// Obj:= make(map[Prdata]string)
var Pr Prdata
err = json.Unmarshal(pdata , &Pr)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(pdata))
fmt.Println(Pr)
fmt.Println(u)
render(w, "internal", Pr)
}
str := `{
"image": "1Appleiphone7.jpeg",
"pname": "iphone7",
"price": "70000",
"puid": "d6742e4e-2ad6-43c5-97f4-e8a7b00684e2",
"quantity": "100"
}`
fmt.Println(字符串(pdata))
给出此输出
[{“image”:“1Appleiphone7.jpeg”,“pname”:“iphone7”,“price”:“70000”,“puid”:“d6742e4e-2ad6-43c5-97f4-e8a7b00684e2”,“quantity”:“100”}]
我只成功地将数据解组到接口{}
对象中。尝试使用接口{}
类型的键和字符串
类型的值创建映射,但会引发错误:
“json:无法将数组解组为map[interface{}]string类型的Go值”
render函数接受类型为interface{}
func render(w http.ResponseWriter, name string, data interface{})
fmt.Println(Pr)
给出以下输出:
[地图[数量:100图片:1Appleiphone7.jpeg pname:iphone7价格:70000 puid:d6742e4e-2ad6-43c5-97f4-e8a7b00684e2]]
u
是structUser
var u = &User{}
type User struct {
Uuid string
Username string
Password string
Fname string
Email string
}
我可以使用管道{{.}
在html页面上看到输出。但是,我无法使用fieldname访问任何数据
一定有办法做到这一点。但我不知道怎么做
当我传递下面类型的json时,我能够将其传递给struct类型,并使用模板中的管道通过键值引用它
if uuid != "" {
pdata, err := getProduct()
if err != nil {
fmt.Println(err)
}
type Prdata struct {
Puid string `json:"puid"`
Pname string `json:"pname"`
Quantity string `json:"quantity"`
Price string `json:"price"`
Image string `json:"image"`
}
// Obj:= make(map[Prdata]string)
var Pr Prdata
err = json.Unmarshal(pdata , &Pr)
if err != nil {
fmt.Println(err)
}
fmt.Println(string(pdata))
fmt.Println(Pr)
fmt.Println(u)
render(w, "internal", Pr)
}
str := `{
"image": "1Appleiphone7.jpeg",
"pname": "iphone7",
"price": "70000",
"puid": "d6742e4e-2ad6-43c5-97f4-e8a7b00684e2",
"quantity": "100"
}`
解组函数
err = json.Unmarshal([]byte(str), &Pr)
DB记录
pdata
的json数据与上面的str
的json数据的区别在于使用了倒勾“`”。虽然json数据显示键值对,但它实际上是一个json数组,而不是json对象。有没有办法解决这个问题?您不需要使用map[interface{}]字符串来解组json对象。您的json相当于地图的切片:
[
{
"image":"1Appleiphone7.jpeg",
"pname":"iphone7",
"price":"70000",
"puid":"d6742e4e-2ad6-43c5-97f4-e8a7b00684e2",
"quantity":"100"
}
]
要解组的对象应该是带有字符串键和值的贴图切片:
var Pr []map[string]string
顺便说一句,我相信这里隐藏着误解:
render函数接受接口{}类型的参数
我的意思不是说你必须在那里传递接口{}
类型的变量,而是说你可以将任何类型的变量传递给呈现
函数。我正在发布一个将json作为字节解包到结构类型的工作示例,然后可以使用模板中的{.}
引用该结构类型
包干管
import (
"encoding/json"
"fmt"
)
type Usrdata struct {
Uuid string
Fname string
}
type Prdata struct {
Puid string `json:"puid"`
Pname string `json:"pname"`
Quantity string `json:"quantity"`
Price string `json:"price"`
Image string `json:"image"`
}
type Data struct {
U Usrdata
P []Prdata
}
func main() {
Ur := Usrdata{Uuid: "xyz", Fname: "Somename"}
Pr := make([]Prdata, 0)
var Dt Data
Dt.U = Ur
pdata := `[{"image":"1Appleiphone7.jpeg","pname":"iphone7","price":"70000","puid":"d6742e4e-2ad6-43c5-97f4-e8a7b00684e2","quantity":"100"}]`
err := json.Unmarshal([]byte(pdata), &Pr)
if err != nil {
fmt.Println(err)
}
Dt.P = Pr
fmt.Println(Pr[0].Pname)
fmt.Println(Pr)
fmt.Println(Dt)
}
尝试映射[string]接口{}您的问题是关于解组(据我所知),而不是关于模板。请将主题改为“用GoLang解组多项目json”。也许我需要做的是创建一个包含product struct字段的结构,另一个结构表示包含User和product类型的数据。我需要将json解组到产品结构中,并将数据传递给呈现函数。我一直在尝试,但没能把它弄对。你可以根据自己的需要解组jason obj,但我不知道什么是类型产品,也不知道如何在我从未见过的代码中使用它。我所能想到的是,您所发布的JSON-OBJ可以轻松地解封到[MA] MAP[String ]字符串。