Golang : Save map/struct to JSON or XML file
Previous tutorial on converting map/slice/array to JSON or XML format is for output to web via net/http
package. This tutorial is a slight modification and save the output to JSON or XML file instead.
Here you go!
package main
import (
"encoding/json"
"encoding/xml"
"fmt"
"io"
"os"
"strconv"
)
type Person struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
// create and populate a map from dummy JSON data
dataStr := `{"Name":"Dummy","Age":0}`
personMap := make(map[string]interface{})
err := json.Unmarshal([]byte(dataStr), &personMap)
if err != nil {
panic(err)
}
var onePerson Person
// convert map to Person struct
onePerson.Name = fmt.Sprintf("%s", personMap["Name"])
onePerson.Age, _ = strconv.Atoi(fmt.Sprintf("%v", personMap["Age"]))
jsonData, err := json.Marshal(onePerson)
if err != nil {
panic(err)
}
// sanity check
fmt.Println(string(jsonData))
// write to JSON file
jsonFile, err := os.Create("./Person.json")
if err != nil {
panic(err)
}
defer jsonFile.Close()
jsonFile.Write(jsonData)
jsonFile.Close()
fmt.Println("JSON data written to ", jsonFile.Name())
// write to XML file
xmlFile, err := os.Create("./Person.xml")
if err != nil {
panic(err)
}
defer xmlFile.Close()
xmlWriter := io.Writer(xmlFile)
enc := xml.NewEncoder(xmlWriter)
enc.Indent(" ", " ")
if err := enc.Encode(onePerson); err != nil {
fmt.Printf("error: %v\n", err)
}
xmlFile.Close()
fmt.Println("XML data written to ", xmlFile.Name())
}
Output:
{"name":"Dummy","age":0}
JSON data written to ./Person.json
XML data written to ./Person.xml
References:
https://www.socketloop.com/tutorials/golang-create-new-xml-file
https://www.socketloop.com/tutorials/golang-xml-to-json-example
https://www.socketloop.com/tutorials/golang-covert-map-slice-array-to-json-xml-format
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
+4.2k Golang : Process non-XML/JSON formatted ASCII text file example
+9.6k Golang : Transform comma separated string to slice example
+5.5k Golang : Intercept and compare HTTP response code example
+18.4k Golang : Time slice or date sort and reverse sort example
+5k Nginx : How to block user agent ?
+7.4k Golang : Get login name from environment and prompt for password
+9.7k How to automatically restart your crashed Golang server
+22.9k Golang : Saving(serializing) and reading file with GOB
+8.7k Golang : How to convert a number to words
+4.4k Golang : Check if one string(rune) is permutation of another string(rune)
+7.6k Golang : Convert file unix timestamp to UTC time example
+14.6k Golang : How to get hour, minute, second from time?