簡體   English   中英

在 Go 中將字符串轉換為 json

[英]Converting string to json in Go

我是 Go 的新手,正在學習設置 http 服務器。 我想做的是在我的 sql 數據庫中返回 10 部電影的 json output。 但生成的 output 不在 json 中。 我用在線 json 格式化程序檢查了 output,output 是 Z466DEEC76ECDF5FCA6D38ZZ571F6 格式。

我嘗試了 json.Marshall 和 json.Encode,但兩者都沒有給出預期的結果。

type movie_list struct {
    Page int `json:"Page"`
    Results []movie `json:"Results"`
}
type movie struct {
    Id      int `json:"Id"`
    Title   string `json:"Title"`
    Language    string `json:"Language"`
    Release_date string `json:"Release_date"`
    Poster_path string `json:"Poster_path"`
    Background_path string `json:"Background_path"`
    Overview string `json:"Overview"`
    Genre_ids string `json:"Genre_ids"`
}
rows,err:=db.Query("select * from movies limit 10")

         if err!=nil{
            fmt.Println(err)
         }

         var list movie_list
         var tag movie

         for rows.Next(){

             err:=rows.Scan(&tag.Id,&tag.Title,&tag.Language,&tag.Release_date,&tag.Poster_path,&tag.Background_path,&tag.Overview,&tag.Genre_ids)
             if err != nil {
             fmt.Println(err)
            }

            list.Results = append(list.Results,tag)
         }

json.NewEncoder(w).Encode(list) 

postman 中的輸出 - 在此處輸入圖像描述

格式化后的 output - 在此處輸入圖像描述

我的整個代碼如下(供參考)

package main

import (
    "fmt"
    "log"
    "net/http"
    "encoding/json"
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
    "github.com/gorilla/mux"
    "github.com/davecgh/go-spew/spew"
)


func handleRequests() {
    myRouter := mux.NewRouter().StrictSlash(true)
    myRouter.HandleFunc("/", homePage)
    myRouter.HandleFunc("/movie/top_rated", returnSingleArticle)
    log.Fatal(http.ListenAndServe(":10000", myRouter))
}
type movie_list struct {
    Page int `json:"Page"`
    Results []movie `json:"Results"`
}
type movie struct {
    Id      int `json:"Id"`
    Title   string `json:"Title"`
    Language    string `json:"Language"`
    Release_date string `json:"Release_date"`
    Poster_path string `json:"Poster_path"`
    Background_path string `json:"Background_path"`
    Overview string `json:"Overview"`
    Genre_ids string `json:"Genre_ids"`
}


func homePage(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Welcome to the HomePage!")
    fmt.Println("Endpoint Hit: homePage")
}

func returnSingleArticle(w http.ResponseWriter, r *http.Request) {
    //vars := mux.Vars(r)
    //key := vars["id"]

    db, err := sql.Open("mysql", "root:72574484@tcp(127.0.0.1:3306)/PicturePerfect")
             if err != nil {
                 fmt.Println(err)
                 }else{
                 fmt.Println("Connection Established")
             }
    rows,err:=db.Query("select * from movies limit 10")

         if err!=nil{
            fmt.Println(err)
         }

         var list movie_list
         var tag movie

         for rows.Next(){

             err:=rows.Scan(&tag.Id,&tag.Title,&tag.Language,&tag.Release_date,&tag.Poster_path,&tag.Background_path,&tag.Overview,&tag.Genre_ids)
             if err != nil {
             fmt.Println(err)
            }
            fmt.Println(tag.Id)
            s2, _ := json.Marshal(tag)
            list.Results = append(list.Results,tag)
         }

        err = rows.Err()
        if err != nil {
            fmt.Println(err)
        }

        defer db.Close()


            //fmt.Fprintf(w, "Hello, %q\n", list.Results[3])
            json.NewEncoder(w).Encode(list) 
            spew.Dump(list)
            //fmt.Fprintf(w, "given lamguage, %q\n", tag.Poster_path)



}

func main() {
    handleRequests()

}

問題是響應內容類型 header 不是 application/json。 通過在寫入正文之前設置 header 進行修復。

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

如果應用程序沒有指定內容類型,則 net/http 服務器調用http.DetectConentType來設置響應 header 中的內容類型。 function 不檢測 JSON 並且默認為 text/plain。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM