gpt4 book ai didi

html - 如何使用 golang 将未编码的 JSON 连接到 HTML 页面?

转载 作者:行者123 更新时间:2023-12-01 22:21:44 25 4
gpt4 key购买 nike

我已经达到了我已经解码我的 JSON 并且我可以直接从 registry.go 文件打印数据的地步。我不明白(而且我是 golang 和后端开发的新手)是如何将该数据连接到我的 html 页面。如果有人能向我解释如何做到这一点,我将不胜感激。
我看过一些示例,但它们都在一个文件中,我想将 JSON、HTML 和 Go 页面分开。 JSON 是直接从 API 中提取的,并且会有多个 HTML 页面使用该数据。
这是一个示例,非常接近我正在使用的 JSON,它是从 API 中提取的:

{
"count": 4,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"description": "some text",
"displayName": "some more text",
"status": {
"status": "UP",
"lastUpdate": "2020-07-21T12:42:24.968647Z"
},
"type": "test"
},
{
"id": 2,
"description": "some text",
"displayName": "some more text",
"status": {
"status": "UP",
"lastUpdate": "2020-07-21T12:42:24.968647Z"
},
"type": "test"
},
{
"id": 3,
"description": "some text",
"displayName": "some more text",
"status": {
"status": "UP",
"lastUpdate": "2020-07-21T12:42:24.968647Z"
},
"type": "test"
},
{
"id": 4,
"description": "some text",
"displayName": "some more text",
"status": {
"status": "UP",
"lastUpdate": "2020-07-21T12:42:24.968647Z"
},
"type": "test"
}
]
}
这是我正在使用的 registry.go 页面。我有一个单独的 main.go 页面,因为我已经创建了其他页面。我试图把这件作品分开,但如果我不能请告诉我。
package main

import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
)

// Results struct which contains
// an array of results
type Results struct {
Count int `json:"count"`
Results []Result `json:"results"`
}

// Results struct which contains the ID and description
type Result struct {
ID int `json:"id"`
Description string `json:"description"`
DisplayName string `json:"displayName"`
Status Status `json:"status"`
Type string `json:"type"`
}

// Status struct
type Result struct {
Status string `json:"status"`
LastUpdated string `json:"lastUpdated"`
}

func main() {
// Open the jsonFile
jsonFile, err := os.Open("test.json")
// if os.Open returns an error then handle it
if err != nil {
fmt.Println(err)
}

fmt.Println("Successfully Opened test.json")
// defer the closing of the jsonFile in order to parse it later on
defer jsonFile.Close()

// read the opened xmlFile as a byte array.
byteValue, _ := ioutil.ReadAll(jsonFile)

// initialize the results array
var results Results

// unmarshal the byteArray
json.Unmarshal(byteValue, &results)

// Print the count
fmt.Println(results.count)
// iterate through the results and print
for i := 0; i < len(users.Users); i++ {
fmt.Println("ID: " + results.Results[i].ID)
fmt.Println("Desctiption: " + results.Results[i].Description)
}
}
这是我创建的 html 页面(test.html),仅显示正文:
<body>
{{range .}}
<div>
<h3>{{.DisplayName}}</h3>
</div>
<div>{{.Id}}</div>
<div>{{.Description}}</div>
<div>{{.Type}}</div>
{{end}}
</body>
在 Main.go 我有以下引用:
//handler to display the page
http.HandleFunc("/test", hndlerTest)

//hndlerTest - the Testing Page
func hndlerTest(w http.ResponseWriter, req *http.Request){
renderTemplate(w,"test.html", nil)
}

最佳答案

您可以使用 html template package解析和呈现 html 文件并将执行的模板写入您的 http 响应。您可以引用以下示例开始。

package main

import (
"encoding/json"
"html/template"
"log"
"net/http"
)

var htmlFile = `
<body>
{{range .Foos}}
<span>Foo: {{.Foo}}</span>
{{end}}
</body>
`

var jsonData = `[{"foo":1},{"foo":2},{"foo":3}]`

type foo struct {
Foo int `json:"foo"`
}

type Data struct {
Foos []foo
}

func main() {
var d Data
if err := json.Unmarshal([]byte(jsonData), &d.Foos); err != nil {
panic(err)
}

http.HandleFunc("/", func(rw http.ResponseWriter, r *http.Request) {
// Use template.New("index").ParseFiles("index.html") for files
templ, err := template.New("index").Parse(htmlFile)
if err != nil {
panic(err)
}

if err := templ.Execute(rw, d); err != nil {
panic(err)
}
})
log.Panic(http.ListenAndServe(":3030", nil))
}

关于html - 如何使用 golang 将未编码的 JSON 连接到 HTML 页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63072398/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com