1. 程式人生 > >Golang json序列化字串時多了\的問題

Golang json序列化字串時多了\的問題

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"}

,然後再將這個字串賦值給data,此時將response序列化得到的string,如下 {“code”:1,”msg”:”success”,”data”:”{\”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)函式將其轉換一下,這樣也能保證不存在轉義符。