首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Go(Gin)中没有转义字符的Json响应

Go(Gin)中没有转义字符的Json响应
EN

Stack Overflow用户
提问于 2022-08-23 14:27:33
回答 1查看 145关注 0票数 0

我最近开始使用GIN开发Go API。我的API使用两个列从DB获取数据,其中一个列包含整数,另一个列包含一个json字符串。json字符串是动态的,因此我不能使用struct。我使用map[string]interface{}解析json并对其进行修改,然后使用json.Marshal将其解析为json。现在,我返回这个json字符串作为响应,但得到转义字符。已经对此做了一些调查,但还没有找到任何解决办法。下面是我正在使用的代码的一部分

代码语言:javascript
复制
var interface_obj map[string]interface{}
json.Unmarshal([]byte(grants.Data), &interface_obj)
grants_map := interface_obj["role_grants"].(map[string]interface{})
jsonString, err := json.Marshal(grants_map)
jsonBody := string(jsonString)

之后,我将返回JSON作为GIN框架中的响应,如下所示

代码语言:javascript
复制
c.JSON(http.StatusCreated, gin.H{"message": "Json retrieved successfully", "data": jsonBody})

但我得到的输出是

代码语言:javascript
复制
{
    "data": "[{\"action\":\"read\",\"resource\":\"project\"},{\"action\":\"all\",\"resource\":\"users\"},{\"action\":\"all\",\"resource\":\"roles\"},{\"action\":\"all\",\"resource\":\"project-settings\"},{\"action\":\"create\",\"resource\":\"single-entity-screening\"},{\"action\":\"read\",\"resource\":\"single-entity-screening\"},{\"action\":\"create\",\"resource\":\"multi-batch-screening\"},{\"action\":\"read\",\"resource\":\"multi-batch-screening\"},{\"action\":\"read\",\"resource\":\"workspace\"},{\"action\":\"allocate\",\"resource\":\"workspace\"},{\"action\":\"update\",\"resource\":\"workspace\"},{\"action\":\"read\",\"resource\":\"case\"},{\"action\":\"allocate\",\"resource\":\"case\"},{\"action\":\"review\",\"resource\":\"case\"},{\"action\":\"update\",\"resource\":\"case\"},{\"action\":\"read\",\"resource\":\"report\"},{\"action\":\"read\",\"resource\":\"audit-trail\"},{\"action\":\"read\",\"resource\":\"delivery\"}]",
    "message": "Grants retrieved successfully"
}

我把它打印在我的控制台上,它看起来很好,但是在响应时引起了这个问题。有没有办法用某种标准的方法解决这个问题?请指点,谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-23 14:44:16

您不需要执行json.Marshal(grants_map),只需将值直接传递给gin.H并让c.JSON执行编码,即

代码语言:javascript
复制
gin.H{... "data": grants_map}

如果您手头确实有原始JSON数据,您希望将其作为其他尚未发送的JSON数据的一部分发送,则可以将其包装到json.RawMessage中,以避免“双重编码”,即

代码语言:javascript
复制
gin.H{... "data": json.RawMessage(jsonBody)}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73460507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档