通过 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 转义(会将 " 替换为 &amp;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 查询中传递字符串对象?

Node.js-express框架-cookie设置参数详解和举例

如何从express node.js中的对象req数据转换为字符串