golang中使用json進行數(shù)據(jù)交互時,可能會出現(xiàn)需要進行轉義的字符,比如雙引號、反斜杠等。這些特殊字符需要進行轉義才能正常傳輸并被解析。
例子1: package main import ( "encoding/json" "fmt" ) func main() { data := "\"test string\"" jsonStr, _ := json.Marshal(data) fmt.Println(string(jsonStr)) } // 輸出: // "\"test string\"" 例子2: package main import ( "encoding/json" "fmt" ) func main() { data := `c:\test\a\` jsonStr, _ := json.Marshal(data) fmt.Println(string(jsonStr)) } // 輸出: // "c:\\test\\a\\"
在golang中,需要轉義的字符包括:
字符 轉義 " \" \ \\ / \/ \b \b \f \f \n \n \r \r \t \t
如果不想進行轉義,可以使用json.RawMessage類型,如:
package main import ( "encoding/json" "fmt" ) func main() { data := `{"name": "test", "age": "18"}` rawData := json.RawMessage(data) jsonStr, _ := json.Marshal(map[string]interface{}{ "data": rawData, }) fmt.Println(string(jsonStr)) } // 輸出: // {"data":{"name": "test", "age": "18"}}
使用json.RawMessage類型時,需要注意:
- 字段值需要是json字符串
- 在進行json解析時,需要使用json.RawMessage類型進行解析,否則會被當做字符串進行解析。