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

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

嵌套 XML/JSON 結構標簽,定義結構的正確方法是什么?

嵌套 XML/JSON 結構標簽,定義結構的正確方法是什么?

Go
躍然一笑 2023-06-26 16:30:12
讀取請求正文時,很少有 XML 標簽未被解碼我已經使用 json 和 xml 標簽定義了嵌套結構,因為我想在 json 和 xml 中對請求和響應使用相同的架構。var dataNewTestplans DataTestplanerr := xml.NewDecoder(r.Body).Decode(&dataNewTestplans)xmlData, _ := xml.Marshal(dataNewTestplans)fmt.Printf(string(xmlData))數據測試計劃結構:type DataTestplan struct {    Data []Testplan `json:"data" xml:"data"`}測試計劃結構:type Testplan struct {    Group      string      `json:"group" xml:"group"`    Name       string      `json:"name" xml:"name"`    Parameters []Parameter `json:"parameters,omitempty" xml:"parameters,omitempty"`    Released   bool        `json:"released" xml:"released"`    Teststeps  []Teststep  `json:"teststeps,omitempty" xml:"teststeps,omitempty"`    Version    int32       `json:"version" xml:"version"`}參數結構:type Parameter struct {    XMLName     xml.Name `xml:"parameters"`    Comment     string   `json:"comment" xml:"comment"`    Description string   `json:"description,omitempty" xml:"description,omitempty"`}測試步驟結構:type Teststep struct {    XMLName xml.Name `xml:"teststeps"`    AslID   string   `json:"aslId,omitempty" xml:"aslID"`    Bin     int32    `json:"bin,omitempty" xml:"bin"`}XML 發送:<root>  <data>    <element>     <group>TEST</group>     <name>TEST</name>     <parameters>        <element>           <comment>test</comment>           <description>test</description>        </element>        <element>           <comment>test1</comment>        </element>     </parameters>     <released>true</released>     <teststeps>        <element>           <bin>32</bin>        </element>      </teststeps>     <version>1</version>    </element>  </data></root>XML 解碼:<DataTestplan>  <data>    <group></group>    <name></name>    <released>false</released>    <version>0</version>    </data></DataTestplan>我知道缺少標簽很可能是因為結構定義中缺少 xml 標記,但我不確定為什么解碼的信息缺少標簽值?XML 和 JSON 編碼有什么技巧?
查看完整描述

2 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

您可以>在標簽中使用。

如果 XML 元素包含名稱與格式為“a”或“a>b>c”的標記前綴匹配的子元素,unmarshal 將深入到 XML 結構中查找具有給定名稱的元素,并將映射該結構體字段的最里面的元素。以 ">" 開頭的標記相當于以字段名稱開頭,后跟 ">" 的標記。

如果字段使用標簽“a>b>c”,則元素 c 將嵌套在父元素 a 和 b 內。命名相同父級的彼此相鄰的字段將包含在一個 XML 元素中。

例如:

type?DataTestplan?struct?{
????Data?[]Testplan?`json:"data"?xml:"data>element"`
}


查看完整回答
反對 回復 2023-06-26
?
MM們

TA貢獻1886條經驗 獲得超2個贊

無需為每個標簽創建不同的結構。您可以將它們全部嵌入其中。對于 xml 解析,您缺少一些標簽。>您可以通過在 xml 標記中使用 來避免一些代碼復制。當您迭代兩個元素時,這將有效地“合并”它們。下面是一個更簡潔的實現示例:


type Root struct {

    XMLName xml.Name `xml:"root"`

    Data    []struct {

        Group      string `json:"group" xml:"group"`

        Name       string `json:"name" xml:"name"`

        Parameters []struct {

            Comment     string `json:"comment" xml:"comment,omitempty"`

            Description string `json:"description" xml:"description,omitempty"`

        } `json:"parameters" xml:"parameters>element"`

        Released  bool `json:"released" xml:"released"`

        Teststeps []struct {

            Bin int32 `json:"bin" xml:"bin"`

        } `xml:"teststeps>element,omitempty"`

        Version int32 `json:"version" xml:"version"`

    } `json:"data" xml:"data>element"`

}

通過運行:


var dataNewTestplans DataTestplan

err := xml.NewDecoder(r.Body).Decode(&dataNewTestplans)

xmlData, _ := xml.Marshal(dataNewTestplans)

fmt.Printf(string(xmlData))

你得到:


<root><data><element><group>TEST</group><name>TEST</name><parameters><element><comment>test</comment><description>test</description></element><element><comment>test1</comment></element></parameters><released>true</released><teststeps><element><bin>32</bin></element></teststeps><version>1</version></element></data></root>


查看完整回答
反對 回復 2023-06-26
  • 2 回答
  • 0 關注
  • 210 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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