Hướng dẫn convert html to json golang - chuyển đổi html sang json golang

Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

Đóng gói Rejify restify
nhập khẩu ( (
"bytes"
"encoding/json"
"golang.org/x/net/html"
"log"
"strings"
)
// hội tụ đó
// nút HTML được biểu thị bằng cấu trúc jsonnode.
funcconverthtmltojson (nút []*html.node) ([] byte, error) { ConvertHtmlToJson(nodes []*html.Node) ([]byte, error) {
rootjsonNodes: = make ([] jsonNode, len (nút))) := make([]JsonNode, len(nodes))
fori, n: = rangenodes { i, n := range nodes {
rootjsonnodes [i] .populationfrom (n)[i].populateFrom(n)
}
returnJson.marshal (rootjsonNodes) json.Marshal(rootJsonNodes)
}
// jsonNode là một đại diện sẵn sàng cho JSON của một nút HTML.
TypeJsonNodestruct { JsonNode struct {
// Tên là tên/thẻ của phần tử
Namestring`json:"name,omitempty"` string `json:"name,omitempty"`
// Các thuộc tính chứa các thuộc tính của phần tử khác ngoài ID, Lớp và HREF
Attributesmap[string]string`json:"attributes,omitempty"` map[string]string `json:"attributes,omitempty"`
// Lớp chứa thuộc tính lớp của phần tử
Classstring`json:"class,omitempty"` string `json:"class,omitempty"`
// id chứa thuộc tính id của phần tử
Idstring`json:"id,omitempty"` string `json:"id,omitempty"`
// href chứa thuộc tính href của phần tử
Hrefstring`json:"href,omitempty"` string `json:"href,omitempty"`
// Văn bản chứa văn bản bên trong của phần tử
Textstring`json:"text,omitempty"` string `json:"text,omitempty"`
// Các phần tử chứa các phần tử con của phần tử
Các yếu tố [] jsonnode`json: "các yếu tố, omitempty" ` []JsonNode `json:"elements,omitempty"`
}
// jsonNode là một đại diện sẵn sàng cho JSON của một nút HTML. (n *JsonNode) populateFrom(htmlNode *html.Node) *JsonNode {
TypeJsonNodestruct { htmlNode.Type {
// Tên là tên/thẻ của phần tử html.ElementNode:
n.Name=htmlNode.Data.Name = htmlNode.Data
break
// Các thuộc tính chứa các thuộc tính của phần tử khác ngoài ID, Lớp và HREF html.DocumentNode:
break
// Lớp chứa thuộc tính lớp của phần tử:
// id chứa thuộc tính id của phần tử.Fatal("Given node needs to be an element or document")
}
returnJson.marshal (rootjsonNodes) textBuffer bytes.Buffer
} len(htmlNode.Attr) > 0 {
// jsonNode là một đại diện sẵn sàng cho JSON của một nút HTML..Attributes = make(map[string]string)
TypeJsonNodestruct { a html.Attribute
// Tên là tên/thẻ của phần tử _, a = range htmlNode.Attr {
// Các thuộc tính chứa các thuộc tính của phần tử khác ngoài ID, Lớp và HREF a.Key {
// Lớp chứa thuộc tính lớp của phần tử "class":
n.Class=a.Val.Class = a.Val
// id chứa thuộc tính id của phần tử "id":
n.Id=a.Val.Id = a.Val
// href chứa thuộc tính href của phần tử "href":
n.Href=a.Val.Href = a.Val
// Lớp chứa thuộc tính lớp của phần tử:
// id chứa thuộc tính id của phần tử.Attributes[a.Key] = a.Val
}
}
}
e:=htmlNode.FirstChild := htmlNode.FirstChild
returnJson.marshal (rootjsonNodes) e != nil {
} e.Type {
// jsonNode là một đại diện sẵn sàng cho JSON của một nút HTML. html.TextNode:
TypeJsonNodestruct { := strings.TrimSpace(e.Data)
// Tên là tên/thẻ của phần tử len(trimmed) > 0 {
// Các thuộc tính chứa các thuộc tính của phần tử khác ngoài ID, Lớp và HREF
// Lớp chứa thuộc tính lớp của phần tử textBuffer.Len() > 0 {
// id chứa thuộc tính id của phần tử.WriteString(" ")
}
returnJson.marshal (rootjsonNodes).WriteString(trimmed)
}
// Tên là tên/thẻ của phần tử html.ElementNode:
// Các thuộc tính chứa các thuộc tính của phần tử khác ngoài ID, Lớp và HREF n.Elements == nil {
// Lớp chứa thuộc tính lớp của phần tử.Elements = make([]JsonNode, 0)
}
returnJson.marshal (rootjsonNodes) jsonElemNode JsonNode
}.populateFrom(e)
// jsonNode là một đại diện sẵn sàng cho JSON của một nút HTML..Elements = append(n.Elements, jsonElemNode)
}
e=e.NextSibling = e.NextSibling
}
// Lớp chứa thuộc tính lớp của phần tử textBuffer.Len() > 0 {
// id chứa thuộc tính id của phần tử.Text = textBuffer.String()
}
returnJson.marshal (rootjsonNodes) n
}