【发布时间】:2017-06-17 22:56:48
【问题描述】:
我将表的所有行作为 json 格式返回到变量 pdata 并将其解组为接口对象。
我有一个用户结构的实例,我想将它与未编组的 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 类型的值制作地图,但它会引发错误:
"json: 无法将数组解组为 map[interface {}]string 类型的 Go 值"
渲染函数接受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 是结构体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和上面str的json数据的区别在于使用了反引号“`”。看起来虽然json数据显示的是键值对,但它实际上是一个json数组,而不是一个json对象。有没有办法解决这个问题?
【问题讨论】:
-
试试 map[string]interface{}
-
您的问题是关于解组(据我所知)而不是关于模板。请将主题更改为:“Unmarshal multi-item json with GoLang”。
标签: parsing templates go interface