golang的xml、json解析
xml
golang的xml处理主要应用Unmarshal、Marshal方法实现,解析一个xml到struct如下,首先是xml文件:
<?xml version="1.0" encoding="utf-8"?>
<servers version="1.0">
<!--测试注释server-->
<server desc="s1">
<serverName>Shanghai_VPN</serverName>
<serverIP>127.0.0.1</serverIP>
</server>
<server desc="s2">
<!---->
<serverName>Beijing_VPN</serverName>
<serverIP>127.0.0.2</serverIP>
</server>
</servers>
下面记录下主要代码:
// parse2xml project main.go
package main import (
"encoding/xml"
"fmt"
"io/ioutil"
"os"
) type Recurlyservers struct {
XMLName xml.Name `xml:"servers"`
Version string `xml:"version,attr"`
Svs []server `xml:"server"`
Description string `xml:",innerxml"`
} type server struct {
XMLName xml.Name `xml:"server"`
Desc string `xml:"desc,attr"`
ServerName string `xml:"serverName"`
ServerIP string `xml:"serverIP"`
TestDesc string `xml:",innerxml"`
} func main() { file, err := os.Open("servers.xml")
if err != nil {
fmt.Printf("%s", err.Error())
panic(err)
}
defer file.Close()
data, err := ioutil.ReadAll(file)
v := Recurlyservers{}
err = xml.Unmarshal(data, &v)
if err != nil {
fmt.Printf("%s", err.Error())
panic(err)
}
fmt.Printf("%#v", v)
}
打印结果:

可以发现Unmarshal解析时的一些规则:
1、解析使用struct的tag配置,通过底层反射实现
2、类型为xml.Name的struct字段XMLName对应的是xml中的“父”节点名称,如servers
3、*,attr对应的为当前父节点上的属性名称,如version,attr,对应的便是xml文件中servers节点的version属性
4、tag中仅写一个名称如serverName,表示serverName为节点名称
5、对于某个struct中,innerxml的tag标注,该struct的属性对应的数据为该struct相应的XMLName对应的xml下的所有内容,比如TestDesc对应的为server节点下的所有内容,Description对应的便是servers下的所有内容
由struct生成对应的xml,方法如下:
// struct2xmll project main.go
package main import (
"encoding/xml"
"fmt"
"os"
) type Servers struct {
XMLName xml.Name `xml:"servers"`
Version string `xml:"version,attr"`
Svs []server `xml:"server"`
} type server struct {
ServerName string `xml:"serverName"`
ServerIP string `xml:"serverIP"`
} func main() {
v := &Servers{Version: "1.0"}
v.Svs = append(v.Svs, server{"Shanghai_VPN", "127.0.0.1"})
v.Svs = append(v.Svs, server{"Beijing_VPN", "127.0.0.1"})
output, err := xml.MarshalIndent(v, " ", " ")
if err != nil {
fmt.Println(err.Error())
return
}
os.Stdout.Write([]byte(xml.Header))
file, err := os.Create("servers.xml")
file.Write([]byte(xml.Header))
file.Write(output)
}
生成的xml文档:

json
将json字符串解析为struct:
// jsonparse project main.go
package main import (
"encoding/json"
"fmt"
) type Server struct {
ServerName string `json:"serverName"`
ServerIP string `json:"serverIP"`
} type Serversslice struct {
Servers []Server `json:"servers"`
} func main() {
var s Serversslice
str := `{"servers":[{"serverName":"Shanghai_VPN","serverIP":"127.0.0.1"},{"serverName":"Beijing_VPN","serverIP":"192.168.20.132"}]}`
json.Unmarshal([]byte(str), &s)
fmt.Printf("%#v", s)
}
结果:

将一个struct解析为json如下:
package main import (
"encoding/json"
"fmt"
) type Server struct {
serverName string `json:"serverName"`
ServerIP string `json:"serverIP"`
} type ServersSlice struct {
Servers []Server `json:"servers"`
Desc string `json:"desc"`
} func main() {
servers := []Server{{serverName: "admin", ServerIP: "192.168.20.131"}, {serverName: "admin1", ServerIP: "192.168.20.132"}}
desc := "描述部分"
var ss ServersSlice
ss.Desc = desc
ss.Servers = servers
js, _ := json.Marshal(ss)
fmt.Printf("Json: %s", js)
}
结果:

golang的xml、json解析的更多相关文章
- XML JSON解析--基本功能
一,json的解析 json文件: {"code": "cn","cities": [{"name": " ...
- UI学习笔记---第十六天XML JSON解析
一.解析的基本概念 从事先规定好的格式中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据,数据方按照格式获取数据 常见解析方式XML解析JSON解析 二.XML:可扩展标记语言 XML ...
- JSON解析和XML解析对比
JSON解析和XML解析是较为普遍的两种解析方式,其中JSON解析的市场分额更大.本文系统的分析两种解析方式的区别,为更好地处理数据作准备.由于目前阶段主要是做移动开发,所以本文所描述的JSON解析和 ...
- iOS-数据持久化基础-JSON与XML数据解析
解析的基本概念 所谓“解析”:从事先规定好的格式串中提取数据 解析的前提:提前约定好格式.数据提供方按照格式提供数据.数据获取方按照格式获取数据 iOS开发常见的解析:XML解析.JSON解析 一.X ...
- iOS开发笔记3:XML/JSON数据解析
这篇主要总结在iOS开发中XML/JSON数据解析过程用到的方法.XML数据解析主要使用SAX方式的NSXMLParser以及DOM方式的GDataXML,JSON数据解析主要使用NSJSONSeri ...
- Silverlight项目笔记7:xml/json数据解析、TreeView、引用类型与数据绑定错误、图片加载、虚拟目录设置、silverlight安全机制引发的问题、WebClient缓存问题
1.xml/json数据解析 (1)xml数据解析 使用WebClient获取数据,获取到的数据实例化为一个XDocument,使用XDocument的Descendants(XName)方法获得对应 ...
- JSON解析和XML解析
一. XML:用到一个开源解析类,GDataXMLNode(将其加入项目中),添加libxml2.dylib框架 经常用到的方法: 1.- (id)initWithXMLString:(NSStrin ...
- Android基础总结(12)——XML和JSON解析
XML和JSON解析 在网络上传输数据时最常用的格式有两种:XML和JSON.本文主要就是学习如何对这两种常用的数据格式进行解析. 1.XML和JSON的定义 XML:扩展标记语言 (Extensib ...
- iOS开发——网络Swift篇&JSON与XML数据解析
JSON与XML数据解析 JSON数据解析(内置NSJSONSerialization与第三方JSONKit) 一,使用自带的NSJSONSerialization 苹果从IOS5.0后推出了SD ...
随机推荐
- iOS 安装包瘦身(下篇)
本文来自网易云社区 作者:饶梦云 2.4. 清理无用代码 2.4.1. Dead Code Stripping Activating this setting causes the -dead_str ...
- OpenCV库文件介绍
以前都是直接用opencv,都没有仔细研究过,这次把库文件都介绍一下. 1.build和source 当我们安装完opencv中,你会发现在opencv文件夹中有两个文件夹,build和source, ...
- jQuery动态数字翻滚计数到指定数字的文字特效代码
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- composer手动安装到windows
1.配置系统变量 Path 计算机->高级系统设置->环境变量->找到系统变量Path 双击 加入 ;php根目录地址:php中ext地址 如 :“;D:\phpStudy ...
- 网页中这 10 种字体的运用方式,不会让人觉得 Low
简评:字体特效非常多,有目的地选取合理的特效是让它们发挥效果的诀窍所在.好的字体排版是不需要辅助就能被识别的,否则这个设计是失败的. 本文转载自 UISDC,如需转载请联系他们. 对于设计师而言,在日 ...
- python为何需要虚拟环境--Python虚拟环境的安装和配置-virtualenv
一 虚拟环境 virtual environment 它是一个虚拟化,从电脑独立开辟出来的环境.通俗的来讲,虚拟环境就是借助虚拟机docker来把一部分内容独立出来,我们把这部分独立出来的东西称作“容 ...
- excel2010冻结行列
https://jingyan.baidu.com/article/a24b33cd56f6bd19ff002b7c.html
- SpringMVC的JSP页面中中EL表达式不起作用的问题解决
原文地址:https://blog.csdn.net/sinat_35512245/article/details/53611663
- 05. flex元素水平垂直居中(三种position水平垂直居中和两种新老版本水平垂直居中)
flex元素水平垂直居中(三种position水平垂直居中和两种新老版本水平垂直居中) (1).position : <!DOCTYPE html> <html lang=" ...
- python学习,day3: 文件的读写
# coding=utf-8 # Author: RyAn Bi import sys f1 = open('yesterday2',mode='w',encoding='utf-8') #w 只能写 ...