gpt4 book ai didi

json - 在 Go 中将字符串转换为 json

转载 作者:行者123 更新时间:2023-12-01 22:39:54 33 4
gpt4 key购买 nike

我是 Go 新手,正在学习设置 http 服务器。
我想做的是在我的 sql 数据库中返回 10 部电影的 json 输出。但结果输出不在 json 中。
我用在线 json 格式化程序检查了输出,结果是 json 格式。

我尝试了 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 的输出 -
enter image description here

格式化的输出 -
enter image description here

我的整个代码如下(供引用)
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。通过在编写正文之前设置标题来修复。

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

如果应用程序未指定内容类型,则 net/http 服务器调用 http.DetectConentType在响应 header 中设置内容类型。该函数不检测 JSON,默认为 text/plain。

关于json - 在 Go 中将字符串转换为 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58513435/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com