亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過 XML 解析 json

通過 XML 解析 json

Go
慕神8447489 2022-07-18 16:40:58
我真的不明白如何使用 Go 解析來自 Api 的響應,因為我首先看到的是 XML,然后是 Json:<?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>json
查看完整描述

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 包無法訪問它們并且無法填充。


查看完整回答
反對 回復 2022-07-18
  • 1 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號