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
+10.5k Golang : Meaning of omitempty in struct's field tag
+6.2k Linux/Unix : Commands that you need to be careful about
+6.6k Golang : Warp text string by number of characters or runes example
+48.6k Golang : Upload file from web browser to server
+18.6k Golang : Set, Get and List environment variables
+15.5k Golang : invalid character ',' looking for beginning of value
+19.9k Golang : Accept input from user with fmt.Scanf skipped white spaces and how to fix it
+7.5k Golang : Process json data with Jason package
+11.2k Google Maps URL parameters configuration
+7.6k Gogland : Single File versus Go Application Run Configurations
+5.4k Golang : Reclaim memory occupied by make() example