Ответ с помощью объекта JSON в NodeJS (преобразование объекта/массива в строку JSON)

Я новичок в обратном конце кода, и я пытаюсь создать функцию, которая ответит мне на строку json. В настоящее время у меня есть это из примера

function random(response) {
  console.log("Request handler 'random was called.");
  response.writeHead(200, {"Content-Type": "text/html"});

  response.write("random numbers that should come in the form of json");
  response.end();
}

Это в основном просто печатает строку "случайные числа, которые должны быть в форме json". То, что я хочу, чтобы это сделать, - это ответить на строку json того, что когда-либо было. Нужно ли вводить другой тип контента? должна ли эта функция передавать это значение другому, указанному на стороне клиента?

Спасибо за вашу помощь!

Ответ 1

Используя res.json с помощью Express:

function random(response) {
  console.log("response.json sets the appropriate header and performs JSON.stringify");
  response.json({ 
    anObject: { item1: "item1val", item2: "item2val" }, 
    anArray: ["item1", "item2"], 
    another: "item"
  });
}

В качестве альтернативы:

function random(response) {
  console.log("Request handler random was called.");
  response.writeHead(200, {"Content-Type": "application/json"});
  var otherArray = ["item1", "item2"];
  var otherObject = { item1: "item1val", item2: "item2val" };
  var json = JSON.stringify({ 
    anObject: otherObject, 
    anArray: otherArray, 
    another: "item"
  });
  response.end(json);
}

Ответ 2

var objToJson = { };
objToJson.response = response;
response.write(JSON.stringify(objToJson));

Если вы alert(JSON.stringify(objToJson)), вы получите {"response":"value"}

Ответ 3

Вы должны использовать функцию JSON.stringify(), включенную в двигатель V8, который использует node.

var objToJson = { ... };
response.write(JSON.stringify(objToJson));

Изменить: Насколько я знаю, IANA официально зарегистрировал MIME-тип для JSON as application/json в RFC4627. Он также указан в Тип интернет-медиа здесь.

Ответ 4

Per JamieL answer to другое сообщение:

Так как Express.js 3x, объект ответа имеет метод json(), который устанавливает все заголовки правильно для вас.

Пример:

res.json({"foo": "bar"});

Ответ 5

в экспресс могут быть форматированные JSON с приложениями.

после просмотра выражения express\lib\response.js, я использую эту процедуру:

function writeJsonPToRes(app, req, res, obj) {
    var replacer = app.get('json replacer');
    var spaces = app.get('json spaces');
    res.set('Content-Type', 'application/json');
    var partOfResponse = JSON.stringify(obj, replacer, spaces)
        .replace(/\u2028/g, '\\u2028')
        .replace(/\u2029/g, '\\u2029');
    var callback = req.query[app.get('jsonp callback name')];
    if (callback) {
        if (Array.isArray(callback)) callback = callback[0];
        res.set('Content-Type', 'text/javascript');
        var cb = callback.replace(/[^\[\]\w$.]/g, '');
        partOfResponse = 'typeof ' + cb + ' === \'function\' && ' + cb + '(' + partOfResponse + ');\n';
    }
    res.write(partOfResponse);
}