Golang json序列化字串時多了\的問題
阿新 • • 發佈:2019-02-17
golang json序列化得到的資料有\的問題
我們在對外提供API介面,返回響應的時候,很多時候需要使用如下的資料結構
type Response struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
該API介面返回一個狀體碼,狀態資訊,以及具體的值。但是具體的值可能根據各個介面的不同而不同。
在實際的開發過程中我們可能會得到一個實際的資料值,並將這個值賦值給data,然後json序列化返回給呼叫方。
這時如果你得到的data是一個經過json序列化之後的字串,類似於{"Name":"happy"}
我們會發現之前已經序列化好的字串,每一個都多了\,這是因為轉義引起的問題。
解決方法
1 直接將未序列化的data賦值給data
package main
import (
"encoding/json"
"fmt"
)
type Response struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
type People struct {
Name string
}
func main() {
data := People{Name: "happy"}
response := &Response{
Code: 1,
Msg: "success",
Data: data,
}
b, err := json.Marshal(&response)
if err != nil {
fmt.Println("err" , err)
}
fmt.Println(string(b))
}
使用json 的RawMessage 將轉義後的string,賦值給data
package main
import (
"encoding/json"
"fmt"
)
type Response struct {
Code int `json:"code"`
Msg string `json:"msg"`
Data interface{} `json:"data"`
}
type People struct {
Name string
}
func main() {
data := `{"Name":"Happy"}`
response := &Response{
Code: 1,
Msg: "success",
Data: json.RawMessage(data),
}
b, err := json.Marshal(&response)
if err != nil {
fmt.Println("err", err)
}
fmt.Println(string(b))
}
通過使用json的json.RawMessage(data)函式將其轉換一下,這樣也能保證不存在轉義符。