我正在restAPI上構建回復并使用json.NewEncoder.Encode()生成JSON回復(注意:w是responsewriter)。u := Reply{Id: id, Status: "progress", Message: ""}
json.NewEncoder(w).Encode(u)這很好用。但是我遇到了另一種情況,其中 Message 將使用已經采用 JSON 格式的字符串填充:RetMessage := "{"debug": "on", "window": { "width": 500, "height": 500}}"
u := Reply{Id: id, Status: "progress", Message: RetMessage}
json.NewEncoder(w).Encode(u)然后回復將是帶有轉義引號等的 JSON,這當然是有意義的,因為它將它解析為 JSON 字符串,但它當然打破了這個概念,因為我希望 RetMessage 按原樣傳遞,而其他消息則按原樣傳遞我想編碼為 JSON。有什么辦法可以巧妙地解決這個問題嗎?RetMessage 中的內容來自文件,因此我無法更改 RetMessage 有時確實已經以 JSON 編碼的形式出現。
2 回答

蕪湖不蕪
TA貢獻1796條經驗 獲得超7個贊
如果Message是一個完整、有效的 JSON 對象,您可以通過將其轉換為 type 來完成您想要的操作json.RawMessage:
type ReplyWithJSON struct {
Id int
Status string
Message json.RawMessage
}
u := ReplyWithJSON{Id: id, Status: "progress", Message: json.RawMessage(RetMessage)}
json.NewEncoder(w).Encode(u)
這應該生成以下輸出:
{"Id":123,"Status":"progress","Message":{"debug":"on","window":{"width":500,"height":500}}}
在操場上觀看它的表演。

皈依舞
TA貢獻1851條經驗 獲得超3個贊
由于沒有任何明智的方法可以做到這一點(并且嘗試尋求明智的方法可能也太過分了)我只是將其更改為:
fmt.Fprintf(w, "{\"Id\":\"%s\",\"Status\":\"%s\",\"Message\":%s}", reply.Id, reply.Status, reply.Message)
- 2 回答
- 0 關注
- 161 瀏覽
添加回答
舉報
0/150
提交
取消