通过 Node Express 将对象作为字符串而不是 JSON 发送
Posted
技术标签:
【中文标题】通过 Node Express 将对象作为字符串而不是 JSON 发送【英文标题】:Send Object as string, not JSON, via Node Express 【发布时间】:2020-06-02 10:54:09 【问题描述】:好的,我希望响应是纯字符串,而不是 JSON。
例如。这个对象
let obj =
foo: 'bar',
baz: 1
应该返回
"foo: 'bar', baz: 1"
代替
"foo": "bar", "baz": 1
为什么?我需要将字符串用作quickchart中的链接
<img src="https://quickchart.io/chart?c=type:'line',data:labels:['January','February', 'March','April', 'May'], datasets:[label:'Dogs', data: [50,60,70,180,190], fill:false,borderColor:'blue',label:'Cats', data:[100,200,300,400,500], fill:false,borderColor:'green']">
JSON 中的双引号会断开图片链接。
或者,也许建议一个更好的方法。
【问题讨论】:
JSON 始终是一个字符串("foo: 'bar', baz: 1"
不是 JSON)
编写你自己的序列化器,如果你的对象属性值只是字符串和数字,这并不难。
@Andreas — 但不是 OP 要求的格式的字符串。 "foo: 'bar', baz: 1"
,正如您所说,不是 JSON,而是 OP 想要的。
尝试使用 encodeURIComponent(JSON.stringify(obj))。确保响应类型为“纯文本”
【参考方案1】:
您可以为此使用JSON.stringify
。
let obj =
foo: 'bar',
baz: 1
console.log(JSON.stringify(obj));
这会将对象转换为字符串。
【讨论】:
一个字符串,是的。 OP 要求的字符串格式:No.【参考方案2】:JSON 中的双引号会断开图片链接。
你有an XY problem。
问题是在由"
字符分隔的属性值中使用"
字符会破坏属性值。
虽然避免在数据中使用"
字符是一种 解决方案,但它并不是一个好的解决方案(主要是因为在不破坏其他内容的情况下避免使用它们很难)。更好的解决方案是正确转义它们。
const json = JSON.stringify(obj);
const url_escaped_json = encodeURIComponent(json);
const img = `<img src="https://quickchart.io/chart?c=$url_escaped_json" >`;
请注意,这不使用 html 转义(会将 "
替换为 &quot;
),因为您将数据放入 URL 中,因此它需要先进行 URL 转义(这会将 "
替换为 @ 987654329@ 渲染不需要的 HTML 转义)。
【讨论】:
完美!谢谢你的精彩解释。喜欢 XY 问题指针。【参考方案3】:您可以利用专用的 API,例如 Image-Charts,它可以很好地处理此类编码问题:
https://image-charts.com/chart?cht=lc
&chd=a:50,60,70,180,190|100,200,300,400,500
&chs=900x400
&chdl=Dogs|Cats&chdlp=t&chdls=444444,15
&chxt=x,y
&chxl=0:|January|February|March|April|May
&chg=1,1
&chco=0018F5,377E22
免责声明:我是 Image-Charts 的创始人。
【讨论】:
以上是关于通过 Node Express 将对象作为字符串而不是 JSON 发送的主要内容,如果未能解决你的问题,请参考以下文章
Node.js身份认证,Cookie和Session的认证机制,express中使用session认证和JWT认证
Node.js / Express - 如何设置响应字符编码?
node——通过express模拟Apache实现静态资源托管
GraphQL-js Node/Express:如何在 GraphQL 查询中传递字符串对象?