Golang xml字符串转struct/xml/json
🕛 Tue, 28 Feb 2017 by GolangNote
Golang xml字符串转struct/xml/json
package main
import (
"encoding/json"
"encoding/xml"
"fmt"
"os"
)
var xmlDataRq = `<?xml version="1.0" encoding="UTF-8"?>
<request>
<head>
<h_exch_code>880061</h_exch_code>
<h_bank_no>0000</h_bank_no>
<h_branch_id>B00000</h_branch_id>
<h_fact_date>20110224</h_fact_date>
<h_fact_time>14:49:20</h_fact_time>
<h_exch_date>20110224</h_exch_date>
<h_serial_no>12345678</h_serial_no>
<h_rsp_code>1</h_rsp_code>
<h_rsp_msg>ok</h_rsp_msg>
</head>
<body>
<record>
<user_id>1204300001</user_id>
<user_pwd>e10adc3949ba59abbe56e057f20f883e</user_pwd>
<login_ip>127.0.0.1</login_ip>
</record>
<record>
<user_id>1204300002</user_id>
<user_pwd>e10adc3949ba59abbe56e057f20f883e2</user_pwd>
<login_ip>127.0.0.2</login_ip>
</record>
</body>
</request>
`
type head struct {
H_exch_code string `xml:"h_exch_code" json:"h_exch_code"`
H_bank_no string `xml:"h_bank_no" json:"h_bank_no"`
H_branch_id string `xml:"h_branch_id" json:"h_branch_id"`
H_fact_date string `xml:"h_fact_date" json:"h_fact_date"`
H_fact_time string `xml:"h_fact_time" json:"h_fact_time"`
H_exch_date string `xml:"h_exch_date" json:"h_exch_date"`
H_serial_no string `xml:"h_serial_no" json:"h_serial_no"`
H_rsp_code string `xml:"h_rsp_code" json:"h_rsp_code"`
H_rsp_msg string `xml:"h_rsp_msg" json:"h_rsp_msg"`
}
type rqRecord struct {
User_id string `xml:"user_id" json:"user_id"`
User_pwd string `xml:"user_pwd" json:"user_pwd"`
Login_ip string `xml:"login_ip" json:"login_ip"`
}
type rqBody struct {
Record []rqRecord `xml:"record" json:"record"`
}
type rspRecord struct {
Server_code string `xml:"server_code" json:"server_code"`
Server_name string `xml:"server_name" json:"server_name"`
Trans_ip string `xml:"trans_ip" json:"trans_ip"`
Trans_port string `xml:"trans_port" json:"trans_port"`
Query_ip string `xml:"query_ip" json:"query_ip"`
Query_port string `xml:"query_port" json:"query_port"`
Broadcast_ip string `xml:"broadcast_ip" json:"broadcast_ip"`
Broadcast_port string `xml:"broadcast_port" json:"broadcast_port"`
Risk_trans_ip string `xml:"risk_trans_ip" json:"risk_trans_ip"`
Risk_trans_port string `xml:"risk_trans_port" json:"risk_trans_port"`
Risk_broadcast_ip string `xml:"risk_broadcast_ip" json:"risk_broadcast_ip"`
Risk_broadcast_port string `xml:"risk_broadcast_port" json:"risk_broadcast_port"`
}
type rspBody struct {
Record []rspRecord `xml:"record" json:"record"`
}
type Request struct {
XMLName xml.Name `xml:"request" json:"request"`
Head head `xml:"head" json:"head"`
Body rqBody `xml:"body" json:"body"`
}
type Response struct {
XMLName xml.Name `xml:"response" json:"response"`
Head head `xml:"head" json:"head"`
Body rspBody `xml:"body" json:"body"`
}
var xmlDataRsp = `<?xml version="1.0" encoding="utf-8"?>
<response>
<head>
<h_exch_code>880061</h_exch_code>
<h_bank_no>0000</h_bank_no>
<h_branch_id>B00000</h_branch_id>
<h_fact_date>20110224</h_fact_date>
<h_fact_time>14:49:20</h_fact_time>
<h_exch_date>20110224</h_exch_date>
<h_serial_no>12345678</h_serial_no>
<h_rsp_code>HJ0000</h_rsp_code>
<h_rsp_msg>处理成功</h_rsp_msg>
</head>
<body>
<record>
<server_code>M01</server_code>
<server_name>内网 </server_name>
<trans_ip>168.33.114.248</trans_ip>
<trans_port>15000</trans_port>
<query_ip>168.33.114.248</query_ip>
<query_port>16000</query_port>
<broadcast_ip>168.33.114.248</broadcast_ip>
<broadcast_port>17000</broadcast_port>
<risk_trans_ip>168.33.114.248</risk_trans_ip>
<risk_trans_port>20000</risk_trans_port>
<risk_broadcast_ip>168.33.114.248</risk_broadcast_ip>
<risk_broadcast_port>21000</risk_broadcast_port>
</record>
<record>
<server_code>M02</server_code>
<server_name>外网</server_name>
<trans_ip>210.21.197.124</trans_ip>
<trans_port>15000</trans_port>
<query_ip>210.21.197.124</query_ip>
<query_port>16000</query_port>
<broadcast_ip>210.21.197.124</broadcast_ip>
<broadcast_port>17000</broadcast_port>
<risk_trans_ip>210.21.197.124</risk_trans_ip>
<risk_trans_port>20000</risk_trans_port>
<risk_broadcast_ip>210.21.197.124</risk_broadcast_ip>
<risk_broadcast_port>21000</risk_broadcast_port>
</record>
</body>
</response>`
func main() {
v := Request{}
xml.Unmarshal([]byte(xmlDataRq), &v)
// sanity check - XML level
fmt.Printf("XMLName: %#v\n", v.XMLName)
fmt.Printf("XMLName: %#v\n", v.Head)
fmt.Printf("Body: %#v\n", v.Body)
fmt.Println("---json")
b, _ := json.Marshal(v)
os.Stdout.Write(b)
fmt.Println("------")
v2 := Response{}
xml.Unmarshal([]byte(xmlDataRsp), &v2)
// sanity check - XML level
fmt.Printf("XMLName: %#v\n", v2.XMLName)
fmt.Printf("XMLName: %#v\n", v2.Head)
fmt.Printf("Body: %#v\n", v2.Body)
fmt.Println("---json")
b2, _ := json.Marshal(v2)
os.Stdout.Write(b2)
}
本文网址: https://golangnote.com/topic/145.html (转载注明出处)
关于GolangNote:记录在工作中使用golang 遇到、面临的相关问题及解决方法。如果你在这里获得一些知识或信息,解决你的编程问题,请考虑捐赠给不幸的人或者你喜欢的慈善机构,除捐赠外,种植树木、志愿服务或减少排碳的行为也很有益处。如果你有任何问题可以在下面 留言
Be the first to comment!
Relative Articles
Recent Go Articles
- Golang 把cookie 字符串解析为cookie 结构
- Golang 计算字符串中包含某个或某些字符集的个数
- 使用Golang 对文件增删写读操作备忘
- Go Modules 使用备忘
- 使用Golang 简单删除图片exif 信息
- 谷歌翻译的 golang 库推荐
- Go 1.13.2 与1.13.3 紧急更新
- golang 人脸检测识别库
- Go build 错误 “stackcheck redeclared in this block previous declaration”的解决方法
- Golang phantomjs 动态代理实现
- Golang chrome debug protocol 库推荐
- Golang 随机打乱数组/Slice
- Golang sync.WaitGroup 的 Wait 超时处理
- Golang实现简单的Socks5代理
- Golang 用snappy + Base64 简单压缩加密进行网络传输
- Golang http IPv4/IPv6 服务
- golang 全角半角相互转换
- 在自己的网站部署TLS 1.3
- Golang 实现/打印菜单树
- Golang telegram 机器人小试
Top Go Articles
- Caddy、 SSLDocker、Nginx 性能比较及使用体验
- Golang byte to string 的方法实践
- Golang Json/map 合并/update
- golang 获取程序本身的md5值
- Golang Leveldb 基本使用的例子
- GoLang 获取变量类型
- golang 当前时间、时间戳、时区的相互转化
- golang map 按value 大小排序,降序和升序
- golang regexp 正则表达式常见的用法
- golang 正确获取绝对路径的方法
- Golang 定时循环的实现
- golang 把上传文件转为byte
- Golang 时区时差处理方式
- golang 用正则包regexp 通过user-agent 识别手机浏览器
- GoLang 正则判断字符是不是中文
- golang 生成良好的唯一ID/uuid库比较
- Golang 把cookie 字符串解析为cookie 结构
- Golang 获取两个数之间的随机数
- golang 用gzip 压缩、解压缩字符串
- GoLang 计算小文件和大文件 md5 值的例子