0

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 から各「要素」にアクセスする方法はありますか?

4

1 に答える 1