如何使用 golang 将未编组的 JSON 连接到 HTML 页面?
Posted
技术标签:
【中文标题】如何使用 golang 将未编组的 JSON 连接到 HTML 页面?【英文标题】:How to connect JSON that is unmarshaled to an HTML page using golang? 【发布时间】:2020-11-14 06:00:38 【问题描述】:我已经解组了我的 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)
【问题讨论】:
【参考方案1】:您可以使用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))
【讨论】:
以上是关于如何使用 golang 将未编组的 JSON 连接到 HTML 页面?的主要内容,如果未能解决你的问题,请参考以下文章
golang 将json映射到GO中的struct,用于直接编组,unmarshal
是否有一个包可以在 golang 中编组进出 x-www-form-urlencoding