Estou trabalhando com um aplicativo Go onde preciso passar dados JSON brutos para um campo struct, mas estou encontrando problemas com escape extra ao marshaling o struct, especialmente quando o JSON bruto contém espaços e tabulações. Especificamente, estou usando os seguintes structs:
type BrandTemplate struct {
Type string `json:"type"` // Template type (e.g., email_forgot_password)
Locale string `json:"locale"` // Locale (e.g., "es" for Spanish, "en" for English)
Template string `json:"template"` // Template content (Email/SMS content)
}
type BrandTemplate1 struct {
Type string `json:"type"`
Locale string `json:"locale"`
Template json.RawMessage `json:"template"` // Use RawMessage to avoid extra escaping
}
A BrandTemplate
estrutura espera que o campo Template seja uma string, mas o JSON bruto que preciso passar contém espaços, tabulações e caracteres especiais que exigem escape, o que não quero fazer manualmente.
Por outro lado, a BrandTemplate1
struct usa json.RawMessage
, que funciona perfeitamente porque preserva o formato JSON bruto. Mas eu quero usar a BrandTemplate
struct, e estou pensando se há uma maneira de evitar escapar manualmente a string JSON e passar JSON bruto de forma limpa, preservando os espaços, tabulações e outras formatações.
Aqui está um exemplo do que estou tentando fazer:
// Define the template as raw JSON
template := `{
"subject": "Email MFA App Verification Code",
"html": "<html><head></head><body><p>Here is the code: {{otp_code}}</p></body></html>",
"plain": "Here is the code: {{otp_code}}"
}`
// Create a new BrandTemplate object
brandTemplate := models.BrandTemplate{
Type: "email_code_app_verification", // Example template type
Locale: "en", // Locale for the template (English)
Template: template, // Pass the raw JSON string
}
Esta é a saída que obtenho quando imprimo brandTemplate
:
BrandTemplate JSON:
{
"type": "email_code_app_verification",
"locale": "en",
"template": "{\n\t\t\"subject\": \"Email MFA App Verification Code\",\n\t\t\"html\": \"\\u003chtml\\u003e\\u003chead\\u003e\\u003c/head\\u003e\\u003cbody\\u003e\\u003cp\\u003eHere is the code: {{otp_code}}\\u003c/p\\u003e\\u003c/body\\u003e\\u003c/html\\u003e\",\n\t\t\"plain\": \"Here is the code: {{otp_code}}\"\n\t}"
}
Esta é a saída esperada:
BrandTemplate JSON:
{
"type": "email_code_app_verification",
"locale": "en",
"template": {
"subject": "Email MFA App Verification Code",
"html": "<html><head></head><body><p>Here is the code: {{otp_code}}</p></body></html>",
"plain": "Here is the code: {{otp_code}}"
}
}
Existe uma maneira melhor de passar JSON bruto com espaços e tabulações para a BrandTemplate
struct sem escape ou marshaling adicional? Eu vi json.RawMessage
usado em outros contextos, mas gostaria de evitar isso se possível e trabalhar diretamente com a BrandTemplate
struct como ela é.
Qualquer conselho ou solução para isso seria muito apreciado!