为每个GET请求创建一个新的JSON文件

时间:2018-05-22 06:27:12

标签: json go

背景故事:我正在使用GET方法检索详细信息。我设法让程序将服务器给出的输出解析为标题为" output.json"的JSON文件。

问题:每次我发出不同的请求时,输出都会覆盖output.json文件中的所有先前内容。是否可以为每个请求创建一个新的JSON文件? 我对GoLang很新,任何帮助都非常有用:)

注意:我只显示用于调用API的方法,如果需要,我将显示其余的代码。

以下是我使用的方法:

func render(endpoint string, w http.ResponseWriter, r *http.Request) {
    // check if request has cookie set
    if cookie, err := r.Cookie(COOKIE_NAME); err != nil {
        // else redirect to OAuth Authorization EP
        redirectToOAuth(w, r, endpoint)
    } else {
        session := cookie.Value
        accessToken := sessions[session]

        // pipe api endpoint
        ep := fmt.Sprintf("%s/%s", fidorConfig.FidorApiUrl, endpoint)
        if api_req, err := http.NewRequest("GET", ep, nil); err != nil {
            w.WriteHeader(500)
            w.Write([]byte(err.Error()))
        } else {
            api_req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", accessToken))
            api_req.Header.Set("Accept", "application/vnd.fidor.de; version=1,text/json") 

            client := &http.Client{}
            if api_resp, err := client.Do(api_req); err != nil {
                w.WriteHeader(500)
                w.Write([]byte(err.Error()))
            } else {
                if api_resp.StatusCode == 401 { // token probably expired
                    handleLogout(w, r, endpoint)
                    return
                }

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


                defer api_resp.Body.Close()
                out, err := os.Create("output.json")
                if err != nil {
                    // panic?
                }
                defer out.Close()
                io.Copy(out, api_resp.Body)

            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

如果你想在你的文件名中附加时间(比如@Florian建议),你可以在创建文件时做类似的事情:

out, err := os.Create(fmt.Sprintf("output-%d.json", time.Now().Unix()))
// filename => output-1257894000.json

此处time.Now().Unix()返回自1970年1月1日UTC(又称Unix时间)以来经过的秒数。所以每次它都会创建不同的json文件。

有关时间的更多信息:https://golang.org/pkg/time/#Time.Unix

答案 1 :(得分:0)

如果您不希望覆盖您的文件,可以为文件指定其他名称(例如,使用time.Now()附加当前时间),也可以append the output to the file, output.json包含所有json文件。