您好,我正在Go Lang中try 下面的代码,在Go Lang中,我必须将json数据更改为XML并将其传递给另一个服务.下面是我try 将json转换为XML的函数

package main

import (
    "encoding/json"
    "encoding/xml"
    "fmt"
)

type Address struct {
        Address1 string `json:"Address1"`
        Address2  string    `json:"Address2"`
        city  string    `json:"city"`
        state  string    `json:"state"`
        zipcode  string    `json:"zipcode"`
}

func main() {
    jsonData := `{  "Address1": "777 Brockton Avenue",
  "Address2": "string",
  "city": "Abington",
  "state": "MA",
  "zipcode": "2351"}`
    var person Address
    err := json.Unmarshal([]byte(jsonData), &person)
    if err != nil {
        panic(err)
    }
    xmlData, err := xml.Marshal(person)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(xmlData))
}

输出如下所示

<Address><Address1>777 Brockton Avenue</Address1><Address2>string</Address2></Address>

我的预期yields 是

<?xml version="1.0"?>
<AddressValidateRequest USERID="702DIGIT27hfgjkf41">
  <Address>
    <Address1>777 Brockton Avenue</Address1>
    <Address2>string</Address2>
    <City>Abington</City>
    <State>MA</State>
    <Zip5>2351</Zip5>
    <Zip4/>
  </Address>
</AddressValidateRequest>

我对这门语言很陌生,任何指导都是非常感谢的

推荐答案

创建另一个具有NameUserIDAddress字段的 struct AS AddressValidateRequest.因为这个 struct 是根据您预期的输出定义的.

此外,CityStateZipcode字段的第一个字符应为大写字母.否则,它们将不会包含在XML输出中.

以下是代码

package main

import (
    "encoding/json"
    "encoding/xml"
    "fmt"
)

type Address struct {
    Address1 string `json:"Address1"`
    Address2 string `json:"Address2"`
    City     string `json:"city"`
    State    string `json:"state"`
    Zip5     string `json:"zipcode"`
    Zip4     string `json:"Zip4"`
}

type AddressValidateRequest struct {
    Name string  `xml:"AddressValidateRequest"`
    UserID  string  `xml:"USERID,attr"`
    Address Address `xml:"Address"`
}

func main() {
    jsonData := `{  
        "Address1": "777 Brockton Avenue",
        "Address2": "string",
        "city": "Abington",
        "state": "MA",
        "zipcode": "2351"
    }`

    var person Address
    err := json.Unmarshal([]byte(jsonData), &person)
    if err != nil {
        panic(err)
    }

    req := AddressValidateRequest{
        UserID:  "702DIGIT2741",
        Address: person,
    }

    xmlData, err := xml.MarshalIndent(req, "", " ")
    if err != nil {
        panic(err)
    }

    fmt.Printf("%s%s \n", xml.Header, string(xmlData))

}

Json相关问答推荐

震击:三针并用震击

使用Jolt库对多个数组进行嵌套循环

如何使用Aeson解码带有Unicode字符的JSON文件?

如何用JQ更改空/布尔/数字的 colored颜色 ?

(已回答)JSON 读取函数返回未定义而不是预期值 - Typescript

如果值不存在,则将值插入 JSON 数组

如何在循环中传递列表(会话(字符串属性))以在 Gatling Scala 中创建批量 Json 请求

PowerShell:如何将哈希表输出为 json 并使用 foreach 循环将其存储在变量中?

序列化为json时如何忽略空列表?

Golang / Go - 如果 struct 没有字段,如何将其编组为空?

如何比较 JSON 文档并返回与 Jackson 或 Gson 的差异?

如何使用 Serde 使用顶级数组反序列化 JSON?

Laravel5 Json 获取文件内容

在 JSON 编码的 HTML5 数据属性中转义/编码单引号

如何在 Perl 中将简单的哈希转换为 json?

as_json 没有在关联上调用 as_json

如何将单引号转义成双引号转成单引号

PHP json_encode json_decode UTF-8

如何向 json IAM 策略添加 comments ?

play 2 JSON 格式中缺少的属性的默认值