通过Node Express将对象作为字符串而不是JSON发送

时间:2020-02-18 12:06:19

标签: javascript html node.js json object

好吧,我希望响应是一个纯字符串,而不是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中的双引号会断开图像链接。

或者,也许建议一种更好的方法。

3 个答案:

答案 0 :(得分:9)

JSON中的双引号会断开图像链接。

您有an XY problem

问题是,在"个字符分隔的属性值中使用"个字符会破坏该属性值。

虽然避免在数据中使用"字符是 a 解决方案,但这并不是一个好方法(主要是因为避免不破坏其他内容而很难做到)。更好的解决方案是正确转义

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转义(将"替换为&quot;),因为您是将数据放入URL中,因此需要先将URL转义(然后将替换{ {1}}与"一起显示不需要的HTML转义)。

答案 1 :(得分:0)

您可以利用专用的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创始人。

答案 2 :(得分:-2)

您可以为此使用JSON.stringify

let obj = {
  foo: 'bar',
  baz: 1
}

console.log(JSON.stringify(obj));

这会将对象转换为字符串。