猿问

如何修改返回的json

我从github APIwith获取数据golang,但是,我只想将必要的数据(id、name、和)发送到前面url,而不是只返回给我的所有内容。languagedescriptiongithub API


func GetAllReposStars(w http.ResponseWriter, r *http.Request) {

    enableCors(&w)

    params := mux.Vars(r)

    username := params["username"]


    res, err := http.Get("https://api.github.com/users/" + username + "/starred")


    body, err := ioutil.ReadAll(res.Body)

    res.Body.Close()

    if err != nil {

        log.Fatal(err)

    }


    log.Printf("Body: %s\n", body)


    if err != nil {

        log.Fatal(err)

    }


    w.Header().Set("Content-Type", "application/json")

    w.Write(body)

    json.NewEncoder(w)

}


温温酱
浏览 180回答 2
2回答

慕容3067478

您可以定义一个只有您需要的键的类型,并将来自 GitHub API 的响应解码为该类型的变量,以便只保留您需要的键,然后将该变量写入响应。例如:package mainimport (    "encoding/json"    "log"    "net/http"    "github.com/gorilla/mux")type RelevantRepoData struct {    Id          int    `json:"id"`    Name        string `json:"name"`    Url         string `json:"url"`    Language    string `json:"language"`    Description string `json:"description"`}func GetAllReposStars(w http.ResponseWriter, r *http.Request) {    enableCors(&w)    params := mux.Vars(r)    username := params["username"]    res, err := http.Get("https://api.github.com/users/" + username + "/starred")    var repoData RelevantRepoData    err = json.NewDecoder(res.Body).Decode(&repoData)    if err != nil {        log.Fatal(err)    }    w.Header().Set("Content-Type", "application/json")    json.NewEncoder(w).Encode(repoData)}

郎朗坤

如果您想将一些特定字段发送到前端但将来想在后端处理它们,您可以json:"-"在您的结构中使用例如:type RelevantRepoData struct {    Irrelevant  string `json:"-"`    Id          int    `json:"id"`    Name        string `json:"name"`    Url         string `json:"url"`    Language    string `json:"language"`    Description string `json:"description"`}当您返回此对象时,带有的字段json:"-"将被忽略,但您仍然可以在后端使用它们。
随时随地看视频慕课网APP

相关分类

Go
我要回答