keks keks - 1 year ago 76
JSON Question

How do I parse an inner field in a nested JSON object in Golang?

I have a JSON object similar to this one:

"name": "Cain",
"parents": {
"mother" : "Eve",
"father" : "Adam"

Now I want to parse "name" and "mother" into this struct:

struct {
Name String
Mother String `json:"???"`

I want to specify the JSON field name with the
struct tag, however I don't know what to use as tag, because it is not the top object I am interested in. I found nothing about this in the
package docs nor in the popular blog post JSON and Go. I also tested

Answer Source

Unfortunately, unlike encoding/xml, the json package doesn't provide a way to access nested values. You'll want to either create a separate Parents struct or assign the type to be map[string]string. For example:

type Person struct {
    Name string
    Parents map[string]string

You could then provide a getter for mother as so:

func (p *Person) Mother() string {
    return p.Parents["mother"]

This may or may not play into your current codebase and if refactoring the Mother field to a method call is not on the menu, then you may want to create a separate method for decoding and conforming to your current struct.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download