簡體   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