繁体   English   中英

如何修改返回的json

[英]How to modify a return json

我正在使用golanggithub API获取数据,但是,我只想将必要的数据( idnameurllanguagedescription )发送到前端,而不仅仅是返回github 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)
}

您可以定义一个只有您需要的密钥的类型,并将来自 GitHub API 的响应解码为该类型的变量,以便只保留您需要的密钥,然后将该变量写入响应。

例如:

package main

import (
    "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:"-"的字段将被忽略,但您仍然可以在后端使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM