如何在Golang中发送硬编码的复杂json respnse

时间:2016-09-20 15:05:38

标签: json go

我正在尝试将一些复杂数据作为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中删除它们,则代码无法编译。

2 个答案:

答案 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。