gpt4 book ai didi

Golang JSON 数组

转载 作者:数据小太阳 更新时间:2023-10-29 03:42:14 26 4
gpt4 key购买 nike

我正在尝试使用 WordNik () 为这个脚本的字典获取随机单词:https://github.com/jmagrippis/password

WordNik 正在输出:

[{"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"}]

这是我的代码:

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")
}

如您所见,我正在尝试做的是使用 WordNik API 请求副词、名词等,然后根据这些词制作字典以生成密码。我对数组和处理数据很糟糕。

最佳答案

正如评论中所指出的,您需要导出字段以便对它们进行解码

encoding/json 包依赖于反射,由于它在另一个包中,它无法访问未导出的字段。 (在 go 中,以小写字母开头的字段、方法或函数未导出,而以大写字母开头的它们被导出)

那么您的示例 json 根本不包含 WordList,因此您想要的是直接解码到 Words 数组中。此外,words 对象仅包含 Id 和 Word,而不包含数组本身。

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)
}
...
}

另一件非常重要的事情是你不应该忽略错误。这会帮助您调试问题。 (我的意思是 _ = json.Unmarshal)

至于开始使用 go,您可以实现一个简单的测试来查看您的代码是否按预期工作。

https://play.golang.org/p/nuz9uXdka5S < 检查此工作示例以供引用。

关于Golang JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48873733/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com