Я пытаюсь напечатать структуру Golang в виде строки с escape-символами, но не могу этого сделать.
Я хочу напечатать свою структуру следующим образом:
"{\"data\":\"MyName\",\"value\":\"Ashutosh\"}"
Вот что я пробовал.
package main
import (
"encoding/json"
"fmt"
)
type Resp struct {
Data string `json:"data"`
Value string `json:"value"`
}
func main() {
var data Resp
data.Data = "Name"
data.Value = "Ashutosh"
r, _ := json.Marshal(data)
fmt.Println("MyStruct: ", string(r))
}
Но печатает так.
{"data":"Name","value":"Ashutosh"}
Может ли кто-нибудь помочь мне получить следующий вывод? :
"{\"data\":\"MyName\",\"value\":\"Ashutosh\"}"
Какова ваша цель сделать это?
спасибо @icza это сработало. вы можете отправить это как ответ. Я отмечу это как правильное решение. Большое спасибо.
@amikai В моей организации некоторым партнерам нужны наши данные в такой форме. Раньше я форматировал строку вручную, и это было трудоемко. Поскольку я новичок в Голанге, я этого не знал. Спасибо ребята.
Чтобы цитировать любые строки, вы можете использовать strconv.Quote():
fmt.Println("MyStruct:", strconv.Quote(string(r)))
В пакете fmt также есть глагол для заключения строк в кавычки: %q
:
Строка и срез байтов (обрабатываются эквивалентно этим глаголам):
%q a double-quoted string safely escaped with Go syntax
Таким образом, вы также можете распечатать его следующим образом:
fmt.Printf("MyStruct: %q", string(r))
Поскольку это также работает для байтовых срезов, вам даже не нужно преобразование string
:
fmt.Printf("MyStruct: %q", r)
Все эти результаты (попробуйте на Go Playground):
MyStruct: "{\"data\":\"Name\",\"value\":\"Ashutosh\"}"
Используйте
strconv.Quote()
следующим образом:fmt.Println("MyStruct:", strconv.Quote(string(r)))
, или используйте глагол%q
:fmt.Printf("MyStruct: %q", r)
. Попробуйте здесь: go.dev/play/p/8t4Tw0RRJhi