【问题标题】:Send Object as string, not JSON, via Node Express通过 Node Express 将对象作为字符串而不是 JSON 发送
【发布时间】: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))。确保响应类型为“纯文本”

标签: javascript html node.js json object


【解决方案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}" alt="...">`;

请注意,这不使用 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 的创始人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 1970-01-01
    • 2021-12-16
    • 2020-05-12
    相关资源
    最近更新 更多