Golang : How to unmarshal JSON inner/nested value and assign to specific struct?
Another tutorial to be recorded here after helping a newbie to Golang. His problem was how to deal with JSON data that have inner block. Such as :
family := `{
"name": "BiBi",
"parents": {
"mother": "MaMa",
"father": "PaPa"
}
}`
and how to unmarshal the JSON inner/nested value of parents and assign the data to specific structure?
To deal with JSON inner block, the solution is stiil to unmarshal the JSON data with the standard way of un-marshaling JSON data and access the inner/nested values of parents by doing additional mapping to the MyMother and MyFather structs. See code example below.
package main
import (
"encoding/json"
"fmt"
)
type MyMother struct {
Name string
Mother string
}
type MyFather struct {
Name string
Father string
}
type Family struct {
Name string
Parents struct {
Mother string
Father string
}
}
var jsonData = `{
"name": "BiBi",
"parents": {
"mother": "MaMa",
"father": "PaPa"
}
}`
func main() {
jsonFamily := &Family{}
err := json.Unmarshal([]byte(jsonData), jsonFamily)
if err != nil {
fmt.Println(err)
}
// assign to MyMother
mama := &MyMother{Name: jsonFamily.Name, Mother: jsonFamily.Parents.Mother}
fmt.Println(mama.Name + " 's mother is " + mama.Mother)
// assign to MyFather
papa := &MyFather{Name: jsonFamily.Name, Father: jsonFamily.Parents.Father}
fmt.Println(papa.Name + " 's father is " + papa.Father)
}
Output :
BiBi 's mother is MaMa
BiBi 's father is PaPa
Hope that this tutorial can be useful to you.
See also : Golang : How to create new XML file ?
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
+8.5k Prevent Write failed: Broken pipe problem during ssh session with screen command
+20.7k Golang : Pipe output from one os.Exec(shell command) to another command
+22.2k Golang : Use TLS version 1.2 and enforce server security configuration over client
+6.1k Unix/Linux : How to open tar.gz file ?
+12.8k Golang : Transform comma separated string to slice example
+11.7k Golang : Format numbers to nearest thousands such as kilos millions billions and trillions
+13.3k Golang : Convert(cast) uintptr to string example
+15.4k Golang : How to add color to string?
+10.5k Golang : Generate random integer or float number
+5k Golang : A program that contain another program and executes it during run-time
+15.2k Golang : How do I get the local IP (non-loopback) address ?
+9.4k Golang : does not implement flag.Value (missing Set method)