我正在尝试将一些复杂数据作为JSON响应发送到我的其余API之一,如下所示:
y := "[ { \"region\":\"North America\", \"countries\":[{\"country\" : \"United States of America\",\"states\"" +
":[\"California\", \"New York\", ], }, {\"country\" : \"Canada\",\"states\" : [\"Ontario\", \"Quebec\",], }] }," +
"{\"region\": \"Asia\",\"countries\": [{\"country\" :\"China\",\"states\" : [\"Fujian\", \"Guangzhou\" ]}, {" +
"\"country\" : \"Japan\", \"states\" : [ \"Kyushu\", \"Hokaido\" ] } ] }]"
x, err := json.Marshal(y)
fmt.Println(err)
c.JSON(200, string(x))
作为回应,我得到了:
"\"[ { \"region\":\"North America\", \"countries\":[{\"country\" : \"United States of America\",\"states\":[\"California\", \"New York\", ], }, {\"country\" : \"Canada\",\"states\" : [\"Ontario\", \"Quebec\",], }] },{\"region\": \"Asia\",\"countries\": [{\"country\" :\"China\",\"states\" : [\"Fujian\", \"Guangzhou\" ]}, {\"country\" : \"Japan\", \"states\" : [ \"Kyushu\", \"Hokaido\" ] } ] }]\""
如何在响应中删除这些尾随\
?如果我从y
中删除它们,则代码无法编译。
答案 0 :(得分:4)
如果您已经拥有JSON编码的字符串,则不需要Marshal,只需要发送字符串即可。通过Marshalling在这里,您将JSON字符串编码为JSON字符串,因此Go正在转义它。如果你有它,请发送下来。
答案 1 :(得分:0)
我认为OP更关心他的JSON字符串中的反斜杠而不是不必要的json.Marshal
(更多关于下面的内容)
您可以在JSON字符串上使用strconv.Unquote
来清理反斜杠 。
s, _ := strconv.Unquote(y)
fmt.Println(s)
您不需要Marshal y
,它将其转换为字节,然后将其转换回字符串。您可以将y
向下传递到c.JSON
如果您要将struct
捆绑到JSON中,则希望使用Marshal。