Как напечатать структуру в виде простой строки с escape-символами в golang?

Я пытаюсь напечатать структуру 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\"}"

Используйте strconv.Quote() следующим образом: fmt.Println("MyStruct:", strconv.Quote(string(r))), или используйте глагол %q: fmt.Printf("MyStruct: %q", r). Попробуйте здесь: go.dev/play/p/8t4Tw0RRJhi

icza 25.11.2022 11:27

Какова ваша цель сделать это?

amikai 25.11.2022 11:28

спасибо @icza это сработало. вы можете отправить это как ответ. Я отмечу это как правильное решение. Большое спасибо.

Ashutosh Yadav 25.11.2022 11:31

@amikai В моей организации некоторым партнерам нужны наши данные в такой форме. Раньше я форматировал строку вручную, и это было трудоемко. Поскольку я новичок в Голанге, я этого не знал. Спасибо ребята.

Ashutosh Yadav 25.11.2022 11:34
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
4
156
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы цитировать любые строки, вы можете использовать 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\"}"

Другие вопросы по теме