我将表的所有行作为 json 返回到变量 pdata
并将其解码为接口(interface)对象。
我有一个用户结构的实例,我想将其与未编码的 json 数据一起传递给渲染函数,并使用 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)
}
fmt.Println(string(pdata))
给出了这个输出
[{"image":"1Appleiphone7.jpeg","pname":"iphone7","price":"70000","puid":"d6742e4e-2ad6-43c5-97f4-e8a7b00684e2","quantity":"100"}]
我只成功地将数据解码为 interface{}
对象。尝试使用类型为 interface{}
的键和类型为 string
的值来制作 map ,但它会抛出错误:
"json: cannot unmarshal array into Go value of type map[interface {}]string"
render 函数接受类型为 interface{}
的参数
func render(w http.ResponseWriter, name string, data interface{})
fmt.Println(Pr)
给出了这个输出:
[map[quantity:100 image:1Appleiphone7.jpeg pname:iphone7 price:70000 puid:d6742e4e-2ad6-43c5-97f4-e8a7b00684e2]]
u
是结构 User
var u = &User{}
type User struct {
Uuid string
Username string
Password string
Fname string
Email string
}
我可以使用管道 {{.}}
在 html 页面上看到输出。但是,我无法使用字段名访问任何数据。
一定有办法做到这一点。但我不确定如何?
当我传递以下类型的 json 时,我能够将它传递给结构类型并使用模板中的管道通过键值引用它。
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对象。有办法解决这个问题吗?
最佳答案
您不需要 map[interface{}]string
来解码 json obj。您的 json 相当于 map slice :
[
{
"image":"1Appleiphone7.jpeg",
"pname":"iphone7",
"price":"70000",
"puid":"d6742e4e-2ad6-43c5-97f4-e8a7b00684e2",
"quantity":"100"
}
]
要解码的对象应该是一片带有字符串键和值的映射:
var Pr []map[string]string
顺便说一句,我相信那里隐藏着误解:
The render function takes an argument of the type interface{}
我的意思不是说您必须在那里传递 interface{}
类型的变量,而是说您可以将任何类型的变量传递给render
函数。
关于parsing - 如何将多个数据对象传递给 Golang 中的 HTML 模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41975647/