有没有办法在golang中格式化此json?

我今天才刚刚开始学习GoLang,我正在尝试构建一个简单的Rest API Web服务器。

这是我希望将每个请求发送到Web服务器的响应结构:

package main

type HttpResp struct{

Status int `json:"status"`

Description string `json:"description"`

Body string `json:"body"`

}

这是我的 文件,该文件具有获取数据库中所有文章的功能:

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)})

}

我在这里面临的问题是响应是这样的:

{“状态”: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 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)

}

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

json.NewEncoder(w).Encode(HttpResp{Status: 200, Body: articles})

}

以上是 有没有办法在golang中格式化此json? 的全部内容, 来源链接: utcz.com/qa/412489.html

回到顶部