Відповідь з об'єктом JSON в Node.js (перетворення об'єкта / масиву в рядок JSON)


98

Я новачок для бек-енд-коду і намагаюся створити функцію, яка відповідатиме мені на рядок 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 будь-яких чисел. Чи потрібно вводити інший тип вмісту? чи повинна ця функція передавати це значення іншому, сказаному на стороні клієнта?

Спасибі за вашу допомогу!


res.json ({"Ключ": "Значення"});
Amol M Kulkarni

Відповіді:


161

Використання 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);
}

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

Якщо ви alert(JSON.stringify(objToJson))отримаєте{"response":"value"}


Остерігайтеся, що res.write (JSON.stringify ()) все ще чекайте, коли ви "закінчите" відповідь. (res.end ()); висловіть .json () для вас
131

22

Ви повинні використовувати JSON.stringify()функцію, що входить до двигуна V8, який використовує вузол.

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

Редагувати: Наскільки мені відомо, IANA офіційно зареєструвала тип MIME для JSON, як і application/jsonв RFC4627 . Він також зазначений у списку типів Інтернет-медіа тут .


Чи слід також встановити заголовок типу вмісту на додаток / json чи щось подібне? Яка найкраща практика для цього?
ampersand

1
Так, щоб зробити його правильною відповіддю клієнт зрозуміє. Додати: res.writeHead (200, {'Content-Type': 'application / json'}) раніше
Алі

12

Per JamieL «S відповідь на іншу посаду :

Оскільки Express.js 3x, об'єктом відповіді є метод json (), який встановлює всі заголовки правильно для вас.

Приклад:

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

Як я можу зробити те ж саме з файлом JSON?
HGB

не забувайте res.end () якщо ви користуєтесь цим, мені це було потрібно
Чарльз Харрінг

2

у експресі можуть існувати формати 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);
}

Це для повернення функцій javascript назад? Чи правильно я це отримую? І навіщо це робити? Просто цікаво
Сем Влобергс

0
const http = require('http');
const url = require('url');

http.createServer((req,res)=>{

    const parseObj =  url.parse(req.url,true);
    const users = [{id:1,name:'soura'},{id:2,name:'soumya'}]

    if(parseObj.pathname == '/user-details' && req.method == "GET") {
        let Id = parseObj.query.id;
        let user_details = {};
        users.forEach((data,index)=>{
            if(data.id == Id){
                user_details = data;
            }
        })
        res.writeHead(200,{'x-auth-token':'Auth Token'})
        res.write(JSON.stringify(user_details)) // Json to String Convert
        res.end();
    }
}).listen(8000);

Я використав вищевказаний код у своєму існуючому проекті.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.