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

use*_*232 5 rest json go beego

我正在使用gogo与beego框架,我有服务字符串作为json的问题.

EventsByTimeRange以json格式返回字符串值

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

"{\"key1\":0,\"key2\":0}"
Run Code Online (Sandbox Code Playgroud)

我怎样才能摆脱引号?

Jes*_*han 5

您可以在新类型中重新定义 json 格式字符串。这是一个小演示

package main

import (
    "encoding/json"
    "fmt"
)

type JSONString string

func (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))
}   
Run Code Online (Sandbox Code Playgroud)

在你的情况下,你可以这样写

this.Data["json"] = JSONString(dao.EventsByTimeRange(request))
this.ServeJson()   
Run Code Online (Sandbox Code Playgroud)

顺便说一句,golang-json 包添加了引号,因为它将您的字符串视为 json 值,而不是 json kv 对象。