1 回答

TA貢獻1825條經驗 獲得超6個贊
以下代碼將xml首先解組,然后解組被解組json的Text字段中struct的xml。下面是指向 Playground 的鏈接,您可以在其中運行示例并使用它。
package main
import (
"encoding/json"
"encoding/xml"
"fmt"
"log"
)
type xmlStructure struct {
XMLName xml.Name `xml:"string"`
Text string `xml:",chardata"`
XMLNS string `xml:"xmlns,attr"`
}
type jsonStructure struct {
Error string `json:"error"`
ClassMan string `json:"class_man"`
LogoPath string `json:"logo_path"`
PartNumber string `json:"part_number"`
ClassCat string `json:"class_cat"`
// etc.
}
func main() {
var input = `<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://www.zzap.ru/">{"error":"","class_man":"MITSUBISHI","logopath":"https://koj.blob.core.windows.net/zzap-upload/upload/logos/se12d7724469c1dbbe07e303ac6e91b48.png","partnumber":"MR245368","class_cat":"windscreen washer motor","imagepath":"","code_cat":1116901944,"class_cur":"р.","price_count_instock":24,"price_min_instock":200.0,"price_avg_instock":810.0,"price_max_instock":1380.0,"price_count_order":457,"price_min_order":201.0,"price_avg_order":1079.0,"price_max_order":8004.0,"imagepathV2":[""],"code_man":3113}</string>`
var in xmlStructure
if err := xml.Unmarshal([]byte(input), &in); err != nil {
log.Fatal(err)
}
var msg jsonStructure
if err := json.Unmarshal([]byte(in.Text), &msg); err != nil {
log.Fatal(err)
}
fmt.Printf("%+v", msg)
}
去游樂場
注意:該jsonStructure類型仍然缺少您示例中的某些字段。
注2:由于您是 Go 新手:
問題的關鍵在于struct字段后面的xml和json標簽。它們必須與您獲得的 xml/json 輸入的字段名稱相匹配。對于 xml,有一些特殊情況,例如將xml.Name結構與 xml 標簽匹配所需的類型。(通過這種方式,整個xmlStructure結構與string輸入中的標簽匹配。)xml:"xmlns,attr"該字段的后面還告訴 xml 包查找標簽中XMLNS調用的屬性xmlns。string中缺少的名稱xml:",chardata"告訴 xml 選擇string標簽的內容。
標簽更簡單,僅在json輸入中說明匹配的名稱。
另請注意,結構的字段本身必須導出,否則 xml/json 包無法訪問它們并且無法填充。
- 1 回答
- 0 關注
- 135 瀏覽
添加回答
舉報