gpt4 book ai didi

json - 如何从 Go http.Request 中检索对象?

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

我有一个可以接收 HTTP GET 参数的工作应用。到目前为止,它们一直是字符串和整数,使用

http.Request.FormValue("field")

但现在我在参数中添加了一个简单对象数组,但我不知道如何将其转换为 Go 结构的 slice 。

有问题的数组是

mods:[{
name : x,
max : 1,
min : 2
},{
name:y,...
}]

所以我不确定如何继续将其映射到 Go 结构。我应该先创建结构并使用 JSON 映射 r.FormValue 的结果吗?

最佳答案

假设您要获取一组 github users并想要打印他们的昵称(api.github.com 中的Login 字段)。

给定一个用户数组示例:

[{
"login": "simonjefford",
"id": 136,
"avatar_url": "https://avatars1.githubusercontent.com/u/136?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/simonjefford",
"html_url": "https://github.com/simonjefford",
"followers_url": "https://api.github.com/users/simonjefford/followers",
"following_url": "https://api.github.com/users/simonjefford/following{/other_user}",
"gists_url": "https://api.github.com/users/simonjefford/gists{/gist_id}",
"starred_url": "https://api.github.com/users/simonjefford/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/simonjefford/subscriptions",
"organizations_url": "https://api.github.com/users/simonjefford/orgs",
"repos_url": "https://api.github.com/users/simonjefford/repos",
"events_url": "https://api.github.com/users/simonjefford/events{/privacy}",
"received_events_url": "https://api.github.com/users/simonjefford/received_events",
"type": "User",
"site_admin": false
}]

你需要一个合适的结构来处理它:

type Users []struct {
Login string `json:"login"`
ID int `json:"id"`
AvatarURL string `json:"avatar_url"`
GravatarID string `json:"gravatar_id"`
URL string `json:"url"`
HTMLURL string `json:"html_url"`
FollowersURL string `json:"followers_url"`
FollowingURL string `json:"following_url"`
GistsURL string `json:"gists_url"`
StarredURL string `json:"starred_url"`
SubscriptionsURL string `json:"subscriptions_url"`
OrganizationsURL string `json:"organizations_url"`
ReposURL string `json:"repos_url"`
EventsURL string `json:"events_url"`
ReceivedEventsURL string `json:"received_events_url"`
Type string `json:"type"`
SiteAdmin bool `json:"site_admin"`
}

我建议你使用json-to-go给定一个 json 有一个干净的结构。

然后您可以执行以下操作:

package main

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

func main() {

response, err := http.Get("https://api.github.com/users?since=135")
if err != nil {
log.Fatal(err)
} else {

defer response.Body.Close()
users := UnmarshalUsers(response)
for _, u := range users {
//Print each user's Login nickname
fmt.Println(u.Login)
}

}

}

UnmarshalUsers 在哪里

func UnmarshalUsers(r *http.Response) Users {
body, err := ioutil.ReadAll(r.Body)
if err != nil {
panic(err)
}
var users Users
err = json.Unmarshal(body, &users)
if err != nil {
panic(err)
}

return users
}

关于json - 如何从 Go http.Request 中检索对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44349115/

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