json.stringify добавляет дополнительные обратные косые черты в res.send()

#json #typescript #api #express #postman

#json #typescript #API #выразить #почтальон

Вопрос:

Мой API должен возвращать следующие данные в своем ответе.

 { users: 'All users are as follows: [{id: 1}, {id: 2}]'}
 

Это должен быть объект json с одним из ключевых значений — массивом json. Однако массив json превращается в строку, потому что его нужно добавить к другой строке. Мой код выглядит так:

 const array = [{id: 1}, {id:2}]
const string = 'All users are as follows: '   JSON.stringify(array)
res.send({users: string})
 

Я использую Express для своего API. Когда я проверяю ответ в postman, он добавляет много обратных косых черт в строку. Однако, когда я делаю console.log({a: string}) локально, я не вижу ни одной из этих косых черт.
это то, что я вижу:

 {users: "[{"id":1}, {"id":2}]"}
 

Комментарии:

1. Вы уверены, что эти дополнительные обратные косые черты действительно находятся в строке, а не только в представлении строки, которую вы просматриваете? Например, console.log(""".length) производит 1 , потому """ что это просто способ представления строки, состоящей из кавычек в JavaScript. В самой строке нет обратной косой черты.

2. на самом деле это может быть правдой. Я вижу эти в postman, когда получаю ответ, но когда я выполняю console.log() с тем же самым, я не вижу этих обратных косых черт. но есть ли какой-нибудь способ избавиться от них, когда я увижу ответ в Postman

3. Я не знаю .. возможно, вы захотите пометить этот вопрос «почтальоном» и посмотреть, знает ли кто-нибудь

4. хорошо, спасибо! Я сделаю это

Ответ №1:

    {users: "[{"id":1}, {"id":2}]"}
 

это json-представление ответа, в json строка представляется путем заключения ее в двойные кавычки («), и поэтому, если сама строка содержит двойные кавычки, ее следует экранировать.

      { "user": " "name" " } , is invalid  you should use { "user" : ""name""}
 

когда вы печатаете его в консоли, он выводит только экранированный символ, поэтому вы не видите «но».

узнайте больше о javascript grammer на :

https://www.crockford.com/mckeeman.html

когда вы используете JSON.stringify(), он преобразует его в допустимую строку JSON, вы не сможете отправить ее без нее, потому что она отправит ее как объект javascript, а не как допустимый json. используя

res.send ({name:»test»}} отправит ответ как [object][объект]

итак, единственный способ получить то, что вы хотите, — отправить ответ в виде текста, а не в формате JSON:

 const array = [{id: 1}, {id:2}]
const string = 'All users are as follows: '   JSON.stringify(array)
res.send(`{users: "${string}" }`)
 

здесь в res.send вместо {users:string} мы используем «users:string» .

ПРИМЕЧАНИЕ: недопустимый JSON

Вывод:

введите описание изображения здесь

Комментарии:

1. ах, чувак. Думаю, тогда мне придется сохранить обратную косую черту. Спасибо за ваш ответ!

Ответ №2:

Не могли бы вы опубликовать свой код при возврате вашего ответа.

В любом случае, я делаю это так.

 let object = {name: "Juan Dela Cruz"}

res.send(object)
 

Комментарии:

1. Я опубликовал свой код. Я делаю в основном то же самое, но ключевым значением является строка с json-массивом внутри нее. Итак, мой код выглядит так:

2. пусть object = {name: «все имена» JSON.stringify( [ {name: «name1»}, {name: «name2″} ] )» }

3. res.send(объект)

4. В своем коде я ранее выполнил часть JSON.stringify и сохранил ее в переменной

5. Я думаю, что это нормально в функции JSON.stringify, обозначающей, что у вас есть строка внутри строки.