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
+19.4k Golang : Check whether a network interface is up on your machine
+12.8k Golang : Remove or trim extra comma from CSV
+12k Golang : How to parse plain email text and process email header?
+9.8k Golang : Eroding and dilating image with OpenCV example
+31k Golang : Download file example
+14.6k Golang : How to pass map to html template and access the map's elements
+5.2k Linux/Unix/MacOSX : Find out which application is listening to port 80 or use which IP version
+5.6k PHP : Fix Call to undefined function curl_init() error
+20.8k Golang : Saving private and public key to files
+52.8k Golang : How to get struct field and value by name
+33.1k Golang : How to check if a date is within certain range?
+7.9k Golang : Getting Echo framework StartAutoTLS to work