问题描述
我正在尝试使用 sendgrid API 发送电子邮件。我希望消息的正文包含一个格式为 HTML 的 json 对象。
{
"glossary": {
"title": "example glossary","GlossDiv": {
"title": "S","GlossList": {
"GlossEntry": {
"ID": "SGML","SortAs": "SGML","Glossterm": "Standard Generalized MarkuP Language","Acronym": "SGML","Abbrev": "ISO 8879:1986","GlossDef": {
"para": "A Meta-markuP Language,used to create markuP Languages such as DocBook.","GlossSeeAlso": ["GML","XML"]
},"GlossSee": "markup"
}
}
}
}
}
但是电子邮件的正文看起来像这样:
{ “词汇表”:{ "title": "示例词汇表",“光泽度”:{ "title": "S",“光泽列表”:{ “光泽条目”:{ "ID": "SGML","Glossterm": "标准通用标记语言","缩写": "SGML","缩写": "ISO 8879:1986",“光泽度”:{ "para": "一种元标记语言,用于创建 DocBook 等标记语言。","XML"] },"GlossSee": "标记" } } } } }
当我将 json 对象字符串化并使用 sendgrid API 作为 HTML 发送时,电子邮件正文只是一个长文本字符串,难以阅读:( 我也尝试过 NPM 包 retty-print-json
所有这些都会产生相同的结果:电子邮件正文只是一个长文本字符串
字符串化
let html = stringify.JSON(getStats);
const msg = {
to: 'foo@foo.com',from: 'foo@foo.com',subject: datasetTitle,html: html
}
prettyPrintJson
let html = prettyPrintJson.toHtml(getStats);
const msg = {
to: 'foo@foo.com',html: html
}
解决方法
空格包括换行符,默认在 HTML 中折叠。将漂亮打印的 JSON 包裹在 <pre></pre>
中,输出应正确显示。您不需要包来添加换行符,只需在序列化 JSON.stringify(obj,undefined,4)