JSONファイルの内容を表示したいGo Webサーバーがあります..
main.go はファイルを読み取り、データを構造体に入れます。構造体のデータを直接ループすると、次のように端末にデータを出力できます。
グループ1
メンバー1
メンバー2
メンバー3
グループ2
メンバー1
メンバー2
メンバー3
スタイルを設定できるように、これがhtmlに必要なものです。
テンプレートにデータを送信すると、次のようになります
グループ1
[メンバー1 メンバー2 メンバー3]
グループ2
[メンバー1 メンバー2 メンバー3]
GroupMembers が 1 つの文字列として入ってくるように見えます。テンプレートを個々の要素として読み取って、html (例: a ) を追加できるようにする方法を知りたい<br>
です。
私のコードは、次の 3 つのファイルで構成されています。
main.go ファイル:
package main
import (
"bytes"
"encoding/json"
"fmt"
"html/template"
"io/ioutil"
"net/http"
"github.com/dimchansky/utfbom" //used for removing BOM from utf-8
)
//import struct
type dataStruct struct {
GroupName string `json:"name"`
GroupMembers []string `json:"Members"`
}
type Request struct {
}
//File path
const jsonImport = "./static/JSONFiles/OUdata.json"
func main() {
http.HandleFunc("/", pageHandler)
http.ListenAndServe(":2323", nil)
}
func pageHandler(w http.ResponseWriter, r *http.Request) {
//read file
theJson, err := ioutil.ReadFile(jsonImport)
if err != nil {
fmt.Print(err)
}
//get rid of BOM
data, err := ioutil.ReadAll(utfbom.SkipOnly(bytes.NewReader(theJson)))
if err != nil {
fmt.Println(err)
return
}
//make a new struct
var theData []dataStruct
//put the JSON into a struct
err = json.Unmarshal(data, &theData)
if err != nil {
fmt.Println("error!!", err)
}
//loop through and print JSON in terminal
for i := 0; i < len(theData); i++ {
fmt.Println(theData[i].GroupName)
for j := 0; j < len(theData[i].GroupMembers); j++ {
fmt.Println(theData[i].GroupMembers[j])
}
}
//Print test of 1 GroupMember in terminal
fmt.Println(theData[0].GroupMembers[1])
p := theData
t, _ := template.ParseFiles("rolegrouppage.html")
t.Execute(w, p)
}
HTML テンプレート ファイル (rolegrouppage.html):
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Hiya Buddy!</title>
</head>
<body>
{{range .}}
<h1>
{{.GroupName}}
</h1>
<h4>
{{.GroupMembers}}
</h4>
{{end}}
</body>
</html>
データ ファイル (OUdata.json):
[
{
"name": "Group 1",
"Members": [
"Mrs Smith",
"Ms Sigmundsdottir",
"Mr Arnason"
]
},
{
"name": "Group 2",
"Members": [
"Mrs Gunnarsdottir",
"Mr Bjarnason",
"Ms Sturludóttir",
"Mrs Grímsdóttir",
"Mr Rafnkelsson"
]
}
]
これを達成する最善の方法は、JSON ファイルを再フォーマットし、別の方法でループすることでしょうか? または、html/template から各「要素」にアクセスする方法はありますか?