テーブルのすべての行をjsonとして変数pdata
にリトラクトし、インターフェイスオブジェクトに非整列化しています。 私は非構造化jsonデータと共にレンダリング関数に渡し、htmlテンプレートのフィールド引数{{.fieldname}}
を使ってアクセスするユーザー構造体のインスタンスを持っています。複数のデータオブジェクトをGolangのHTMLテンプレートに渡す方法
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))
私だけinterface{}
オブジェクトにデータを非整列化に成功している。この出力に
[{"image":"1Appleiphone7.jpeg","pname":"iphone7","price":"70000","puid":"d6742e4e-2ad6-43c5-97f4-e8a7b00684e2","quantity":"100"}]
を与えます。タイプinterface{}
のキーと種類string
の値を使用してマップを作成しようとしているが、それはエラーがスローされます。
"json: cannot unmarshal array into Go value of type map[interface {}]string"
レンダリング機能は、型の引数を取る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
とstr
上記一方のJSONデータの差は、「`」バッククォートの使用です。 jsonデータはキー値のペアを示していますが、実際はjson配列であり、jsonオブジェクトではありません。これを回避する方法はありますか?
てみマップ[文字列]インターフェース{} – Sridhar
あなたの質問は(私はそれを理解できるように)テンプレートではないマーシャリング解除についてです。話題を「GoLangでマルチ項目を非整列化する」のように変更してください。 – I159