有没有办法在golang中格式化此json?
我今天才刚刚开始学习GoLang,我正在尝试构建一个简单的Rest API Web服务器。
这是我希望将每个请求发送到Web服务器的响应结构:
package maintype HttpResp struct{
Status int `json:"status"`
Description string `json:"description"`
Body string `json:"body"`
}
这是我的 文件,该文件具有获取数据库中所有文章的功能:
package mainimport (
"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)})
}
我在这里面临的问题是响应是这样的:
{“状态”:200,“描述”:“”,“正文”:“ [{\” id \“:\” 1 \“,\”标题\“:\”第一\“,\”正文\“
:\“这是一个测试主体\”,\“说明\”:\“这是一个测试\”}]“}
我希望正文只是JSON,而不是字符串。我该如何实现?
回答:
没有必要将 与
分开编组HttpResp
。而是将Body
字段的类型更改为interface{}
,然后将该字段设置为与json字符串相对的具体类型的任何值,例如[]Article
,然后将resp编组一次。
type HttpResp struct{ Status int `json:"status"`
Description string `json:"description"`
Body interface{} `json:"body"`
}
其余的…
package mainimport (
"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)
}
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(HttpResp{Status: 200, Body: articles})
}
以上是 有没有办法在golang中格式化此json? 的全部内容, 来源链接: utcz.com/qa/412489.html