Ich fange gerade an, GoLang heute zu lernen, ich versuche, einen einfachen Rest API Web Server zu bauen.Gibt es eine Möglichkeit, diesen JSON in Golang zu formatieren?
Hier ist die Antwort Struct ich für jede Anfrage an den Webserver senden möchten:
package main
type HttpResp struct{
Status int `json:"status"`
Description string `json:"description"`
Body string `json:"body"`
}
Und hier ist meine articles.go Datei, die die Funktion haben, die alle Artikel in der Datenbank bekommt:
package main
import (
"encoding/json"
"net/http"
"log"
)
type Article struct{
Id string `json:"id"`
Title string `json:"title"`
Body string `json:"body"`
Description string `json:"description"`
}
func AllArticles(w http.ResponseWriter, r *http.Request){
log.Print("/articles - GET")
db := connect()
defer db.Close()
var articles []Article
results, err := db.Query("SELECT * FROM Articles")
if err != nil{
log.Print(err)
return
}
for results.Next(){
var article Article
err = results.Scan(&article.Title, &article.Description, &article.Body, &article.Id)
if err != nil{
serr, _ := json.Marshal(err)
json.NewEncoder(w).Encode(HttpResp{Status: 500, Description: "Failed to retrieve all articles", Body: string(serr)})
}
articles = append(articles, article)
}
sarr, _ := json.Marshal(articles)
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(HttpResp{Status: 200, Body: string(sarr)})
}
die Frage, die ich hier mit Blick auf bin ist, dass die Antwort ist wie folgt:
{ "status" 200, "Beschreibung": "", "body": "[{\" id \ "\" 1 \ "\ "title \" \ "First \" \" body \ ": \" die ist ein Testkörper \ "\ "Beschreibung \": \ "Dies ist ein Test \"}]"}
ich den Körper möchte nur JSON und nicht sein ein Faden. Wie kann ich das erreichen?
Es ist nur doppelt codiert, weil Ihr Code es doppelt kodiert. Sie kodieren den Körper in JSON, dann fügen Sie diesen JSON in ein Feld einer anderen Struktur ein und kodieren dann * das * zu JSON. Wenn Sie das nicht tun, erhalten Sie die gewünschten Ergebnisse. – Adrian
Das ist auch nützlich https://mholt.github.io/json-to-go/ – RayfenWindspear