I am trying to parse a relatively complex JSON bit. It has straight nodes and has arrays with a variable number of elements. Here is an example:
{
status: 200,
generated: "2014-07-23T13:09:30.315Z",
copyright: "Copyright (c) 2014 Us Not You. All Rights Reserved.",
results: 1,
start: 0,
links: {
next: null,
prev: null,
self: "http://thing.com/thing.json"
},
docs: [
{
id: "thingID_001",
}
]
}
Simplified, of course. There may be zero or more documents, each of which has several nodes. The "links" are simple, I define a structure with the correct fields, and there we go. But the documents, I can’t get to the Marshal. Here is my code:
import (
"net/http"
"fmt"
"io/ioutil"
"encoding/json"
)
type Thinglinks struct {
Next string
Prev string
Self string
}
type ThingSection struct {
Status int
Generated string
Copyright string
Results int
Start int
Links thinglinks
Docs []map[string]interface{}
}
func main() {
resp, err := http.Get("http://thing.com/thing.json")
if err != nil {
fmt.Println(err)
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
var s ThingSection
err3 := json.Unmarshal(body, &s)
if err3 == nil {
fmt.Println(s)
fmt.Println(s.Links.Self)
if len(s.Docs) >0 {
fmt.Println(s.Docs[0])
}
} else {
fmt.Println(err3)
}
}
When I compile and run, I get the expected results for all nodes except Docs, which is always empty.
I strongly suspect that this is the definition of “Documents” in the type declaration for the ThingSection structure, but I could not figure out what to do there.
Any help?