猿问

如何在golang中将字符串值作为json对象返回?

我正在将 golang 与 beego 框架一起使用,但在将字符串作为 json 提供时遇到问题。


EventsByTimeRange 返回一个 json 格式的字符串值


this.Data["json"] = dao.EventsByTimeRange(request) // this -> beego controller

this.ServeJson()


"{\"key1\":0,\"key2\":0}"

我怎样才能摆脱引号?


回首忆惘然
浏览 129回答 2
2回答

隔江千里

您可以在新类型中重新定义 json 格式字符串。这是一个小演示package mainimport (    "encoding/json"    "fmt")type JSONString stringfunc (j JSONString) MarshalJSON() ([]byte, error) {    return []byte(j), nil}func main() {    s := `{"key1":0,"key2":0}`    content, _ := json.Marshal(JSONString(s))    fmt.Println(_, string(content))}   在你的情况下,你可以这样写this.Data["json"] = JSONString(dao.EventsByTimeRange(request))this.ServeJson()   顺便说一句,golang-json 包添加了引号,因为它将您的字符串视为 json 值,而不是 json kv 对象。

慕尼黑8549860

你得到的字符串是一个很好的 JSON 格式的值。您所需要的只是将其解组为正确的类型。见下面的代码。但是,我认为您误解了 ServeJson(),它返回一个 JSON 格式的字符串,您的客户端将使用它,并且它做得很好(请参阅您的问题)。如果删除 qoutes 和斜杠,您最终会得到无效的 JSON 字符串!package mainimport "fmt"import "log"import "encoding/json"func main() {    var b map[string]int    err := json.Unmarshal ([]byte("{\"key1\":0,\"key2\":0}"), &b)    if err != nil{        fmt.Println("error: ", err)    }    log.Print(b)    log.Print(b["key1"])}你会得到:map[key1:0 key2:0]
随时随地看视频慕课网APP

相关分类

Go
我要回答