#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, обозначающей, что у вас есть строка внутри строки.