Golang JSON数组

I am trying to use WordNik () to get random words for the dictionary for this script: https://github.com/jmagrippis/password

WordNik is outputting:

[{"id":7936915,"word":"Tanganyikan"},{"id":27180,"word":"cartographic"},{"id":48094,"word":"deterministic"},{"id":1485119,"word":"higher-risk"},{"id":120986,"word":"juristic"},{"id":1830806,"word":"magnetorheological"},{"id":320495,"word":"quelled"},{"id":324610,"word":"remoter"},{"id":215158,"word":"telemetric"},{"id":225207,"word":"uninquisitive"}]

Here is my code:

package main

import (
    "encoding/json"
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "time"

    "github.com/jmagrippis/password"
)

type Words struct {
    id   []int64
    word []string
}

type GetWordsResponse struct {
    WordList []Words
}

func getWords(speech string) (*GetWordsResponse, error) {

    url := fmt.Sprintf("http://api.wordnik.com/v4/words.json/randomWords?hasDictionaryDef=false&includePartOfSpeech=%s&minCorpusCount=0&maxCorpusCount=-1&minDictionaryCount=1&maxDictionaryCount=-1&minLength=5&maxLength=-1&limit=10&api_key=api_key", speech)

    res, err := http.Get(url)
    if err != nil {
        panic(err.Error())
    }

    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        panic(err.Error())
    }

    var s = new(GetWordsResponse)
    var arr []string
    _ = json.Unmarshal([]byte(body), &arr)
    log.Printf("Unmarshaled: %v", arr)
    return s, err
}

func main() {

    dictionary := &password.Dictionary{
        Adjectives: []string{"beautiful", "homely", "magical", "posh", "excellent"},
        Subjects:   []string{"mermaids", "unicorns", "lions", "piranhas"},
        Verbs:      []string{"love", "fancy", "eat", "bring", "fear", "aggravate"},
        Adverbs:    []string{"cuddling", "slapping", "shouting", "jumping"},
        Objects:    []string{"teddy-bears", "diamonds", "buckets", "boxes"},
    }

    generator := password.NewGenerator(dictionary, time.Now().UnixNano())
    pass := generator.Generate()

    fmt.Printf("%s", pass)

    getWords("Verb")
}

As you can see, what I am trying to do is use WordNik API to request Adverbs, nouns, etc and then make a dictionary based off those words to generate a password. I am horrible with arrays and handling data.

As pointed out in the comments you need to export the fields so they can be unmarshaled

The encoding/json package relies on reflection and since it is in another package, it cannot access unexported fields. ( in go, fields, methods or functions that start with a small letter are unexported whereas with capital letters they are exported )

Then your example json does not contain the WordList at all, so what you want is unmarshaling directly into the array of Words. Also a words object only consists of Id and Word and not of arrays themselves.

type Words struct {
    Id   int64
    Word string
}

func main() {
    .... 
    var words []Words
    // you don't need to read the whole body first, you can decode in the same turn like this
    err := json.NewDecoder(req.Body).Decode(&words)
    if nil != err {
       log.Fatal(err)
    }
   ...
}

Another very important thing is that you should not ignore errors. This would have helped you to debug the issue. ( What I mean is _ = json.Unmarshal)

As for beginning with go, you could implement a simple test to see if your code works as intended.

https://play.golang.org/p/nuz9uXdka5S < check this working example for reference.