Source File: ex25/main.go
package main
import (
"encoding/json"
"encoding/xml"
"fmt"
"log"
"os"
)
type Ingredient struct {
Name string
Amount int
}
type Money struct {
Dollars int `json:"dollars"`
Cents int `json:"cents"`
}
type Cake struct {
Name string `json:"name"`
Ingredients []Ingredient `json:"ingredients"`
Description string `json:"description"`
Price Money `json:"price"`
}
func main() {
choco := Cake{
"Chocolate",
[]Ingredient{
Ingredient{"Chocolate", 1},
Ingredient{"Butter", 2},
Ingredient{"Flour", 2},
Ingredient{"Eggs", 4},
},
"A really good chocolate cake.",
Money{30, 99},
}
json_data, err := json.MarshalIndent(choco, "", " ")
if err != nil { log.Fatal(err) }
err = os.WriteFile("output.json", json_data, 0644)
if err != nil { log.Fatal(err) }
again_data, err := os.ReadFile("output.json")
if err != nil { log.Fatal(err) }
if !json.Valid(again_data) {
log.Fatal("invalid json data")
}
var new_cake Cake
err = json.Unmarshal(again_data, &new_cake)
if err != nil { log.Fatal(err) }
fmt.Println(new_cake)
xml_out, err := xml.MarshalIndent(choco, "", " ")
if err != nil { log.Fatal(err) }
// this will output raw, try adding xml:"" tags like json
fmt.Println(string(xml_out))
}