亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

運行 JSON Encode 時是否可以排除已經是 JSON 的字段?

運行 JSON Encode 時是否可以排除已經是 JSON 的字段?

Go
拉莫斯之舞 2023-06-26 16:49:14
我正在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}}}

在操場上觀看它的表演。


查看完整回答
反對 回復 2023-06-26
?
皈依舞

TA貢獻1851條經驗 獲得超3個贊

由于沒有任何明智的方法可以做到這一點(并且嘗試尋求明智的方法可能也太過分了)我只是將其更改為:

fmt.Fprintf(w, "{\"Id\":\"%s\",\"Status\":\"%s\",\"Message\":%s}", reply.Id, reply.Status, reply.Message)



查看完整回答
反對 回復 2023-06-26
  • 2 回答
  • 0 關注
  • 161 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號