登录
首页 >  Golang >  Go问答

解析 JSON 数据的 XML 方法

来源:stackoverflow

时间:2024-02-17 16:15:27 328浏览 收藏

编程并不是一个机械性的工作,而是需要有思考,有创新的工作,语法是固定的,但解决问题的思路则是依靠人的思维,这就需要我们坚持学习和更新自己的知识。今天golang学习网就整理分享《解析 JSON 数据的 XML 方法》,文章讲解的知识点主要包括,如果你对Golang方面的知识点感兴趣,就不要错过golang学习网,在这可以对大家的知识积累有所帮助,助力开发能力的提升。

问题内容

我真的不明白如何使用 go 解析来自 api 的响应,因为我先看到 xml,然后看到 json:


{"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}

解决方案


以下代码将首先解组 xml,然后解组解组到 structtext 字段中的 json。下面是演示的链接,您可以在其中运行示例并进行操作。

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 = `
{"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}`

    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)
}

Go playground

注意:jsonstructure 类型仍然缺少示例中的某些字段。

注2:由于您是 go 新手:

问题的关键在于struct字段后面的xml和json标签。它们必须与您获得的 xml/json 输入的字段名称匹配。对于 xml,有一些特殊情况,例如需要将结构与 xml 标记相匹配的 xml.name 类型。 (通过此,整个 xmlstructure 结构与输入中的 string 标记相匹配。)xml:"xmlns,attr" 后面的 xmlns 字段告诉 xml 包在 中查找名为 xmlns 的属性string 标签。 xml 中缺少的名称:",chardata" 告诉 xml 选择 string 标记的内容。

json 标签更简单,仅说明输入中的匹配名称。

另请注意,结构体的字段本身必须导出,否则 xml/json 包无法访问它们,也无法填充它们。

以上就是本文的全部内容了,是否有顺利帮助你解决问题?若是能给你带来学习上的帮助,请大家多多支持golang学习网!更多关于Golang的相关知识,也可关注golang学习网公众号。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>