Отправить объект как строку, а не JSON, через узел Express - PullRequest
3 голосов
/ 18 февраля 2020

Хорошо, я хочу, чтобы ответ был простой строкой, а не 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 ]

8 голосов
/ 18 февраля 2020

Двойные кавычки в JSON прерывают ссылку на изображение.

У вас проблема XY .

Проблема означает, что использование " символов в значении атрибута, ограниченном " символами, приведет к нарушению значения атрибута.

Несмотря на то, что избегать использования " символов в данных, 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-адреса (и это заменит " на %20, что сделает экранирование HTML ненужным).

1 голос
/ 19 февраля 2020

Вы можете использовать специальный 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

Отказ от ответственности: I ' Основатель Image-Charts.

0 голосов
/ 18 февраля 2020

Для этого вы можете использовать JSON.stringify.

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

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

Это преобразует объект в строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...