Golang : XML to JSON example
For this tutorial, we will learn how to read data from XML file, process the data and save the output to JSON format. Converting XML to JSON data format can be done easily with the Golang's encoding/xml
and encoding/json
packages.
Create the Employees.xml file with this content :
<?xml version="1.0"?>
<company>
<staff>
<id>101</id>
<firstname>Derek</firstname>
<lastname>Young</lastname>
<username>derekyoung</username>
</staff>
<staff>
<id>102</id>
<firstname>John</firstname>
<lastname>Smith</lastname>
<username>johnsmith</username>
</staff>
</company>
and the code to eat this XML data and poop out JSON file :
package main
import (
"encoding/json"
"encoding/xml"
"fmt"
"io/ioutil"
"os"
)
type jsonStaff struct {
ID int
FirstName string
LastName string
UserName string
}
type Staff struct {
XMLName xml.Name `xml:"staff"`
ID int `xml:"id"`
FirstName string `xml:"firstname"`
LastName string `xml:"lastname"`
UserName string `xml:"username"`
}
type Company struct {
XMLName xml.Name `xml:"company"`
Staffs []Staff `xml:"staff"`
}
func (s Staff) String() string {
return fmt.Sprintf("\t ID : %d - FirstName : %s - LastName : %s - UserName : %s \n", s.ID, s.FirstName, s.LastName, s.UserName)
}
func main() {
xmlFile, err := os.Open("Employees.xml")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer xmlFile.Close()
XMLdata, _ := ioutil.ReadAll(xmlFile)
var c Company
xml.Unmarshal(XMLdata, &c)
// sanity check - XML level
fmt.Println(c.Staffs)
// convert to JSON
var oneStaff jsonStaff
var allStaffs []jsonStaff
for _, value := range c.Staffs {
oneStaff.ID = value.ID
oneStaff.FirstName = value.FirstName
oneStaff.LastName = value.LastName
oneStaff.UserName = value.UserName
allStaffs = append(allStaffs, oneStaff)
}
jsonData, err := json.Marshal(allStaffs)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
// sanity check - JSON level
fmt.Println(string(jsonData))
// now write to JSON file
jsonFile, err := os.Create("./Employees.json")
if err != nil {
fmt.Println(err)
}
defer jsonFile.Close()
jsonFile.Write(jsonData)
jsonFile.Close()
}
run the code above and you should be able to see a new Employees.json file appear in the same directory.
Employees.json
[
{
"ID": 101,
"FirstName": "Derek",
"LastName": "Young",
"UserName": "derekyoung"
},
{
"ID": 102,
"FirstName": "John",
"LastName": "Smith",
"UserName": "johnsmith"
}
]
Reference :
https://www.socketloop.com/tutorials/golang-convert-csv-data-to-json-format-and-save-to-file
See also : Read a XML file in Go
By Adam Ng
IF you gain some knowledge or the information here solved your programming problem. Please consider donating to the less fortunate or some charities that you like. Apart from donation, planting trees, volunteering or reducing your carbon footprint will be great too.
Advertisement
Tutorials
+14.5k Golang : Reset buffer example
+16.9k Golang : Get input from keyboard
+4.6k MariaDB/MySQL : How to get version information
+12.6k Golang : Add ASCII art to command line application launching process
+14.8k Golang : How to check for empty array string or string?
+13.3k Golang : Increment string example
+7.3k Golang : Scanf function weird error in Windows
+8.9k Golang : Go as a script or running go with shebang/hashbang style
+15.7k Golang : How to login and logout with JWT example
+7.4k SSL : How to check if current certificate is sha1 or sha2 from command line
+8.7k Golang : On lambda, anonymous, inline functions and function literals
+22k Golang : How to run Golang application such as web server in the background or as daemon?