Node.js'de bir JSON nesnesiyle yanıt verme (nesneyi / diziyi JSON dizesine dönüştürme)


99

Arka uç kodda yeniyim ve bana bir JSON dizesi yanıtlayacak bir işlev oluşturmaya çalışıyorum. Şu anda bunu bir örnekten aldım

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();
}

Bu temelde "JSON biçiminde gelmesi gereken rastgele sayılar" dizesini yazdırır. Bunun yapmasını istediğim şey, herhangi bir sayıdan oluşan bir JSON dizesiyle yanıt vermek. Farklı bir içerik türü koymam gerekiyor mu? bu işlev bu değeri istemci tarafında bir başkasına iletmeli mi?

Yardımınız için teşekkürler!


res.json ({"Anahtar": "Değer"});
Amol M Kulkarni

Yanıtlar:


162

Res.json'ı Express ile kullanma :

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"
  });
}

Alternatif olarak:

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);
}

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

Eğer alert(JSON.stringify(objToJson))alacaksan{"response":"value"}


Res.write (JSON.stringify ()) hala yanıtı "bitirmenizi" beklediğine dikkat edin. (Yeniden gönder()) ; .json () ifadesini sizin için buna ifade edin
131

23

Sen kullanmak zorunda JSON.stringify()düğüm kullanımları olduğu V8 motoru ile birlikte işlev.

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

Düzenleme: Bildiğim kadarıyla, IANA resmen JSON için MIME türü kaydetti application/jsoniçinde RFC4627 . Ayrıca listelenen edilir İnternet Medya Türü listesinden burada .


İçerik türü başlığı da application / json veya bunun gibi bir şeye ayarlanmalı mı? Bunun için en iyi uygulama nedir?
işareti

1
Evet, müşterinin anlayacağı geçerli bir yanıt olması için. Ekle: res.writeHead (200, {'Content-Type': 'application / json'})
Ali

13

Başına JamieL bireyin cevabı için başka yazı :

Express.js 3x'ten bu yana, yanıt nesnesi, tüm başlıkları sizin için doğru şekilde ayarlayan bir json () yöntemine sahiptir.

Misal:

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

Aynı şeyi bir JSON dosyasıyla nasıl yapabilirim?
HGB

do not res.end () Bunu kullanırsanız, bunu gerekli unutmak
Charles Harring'in

3

ifade biçiminde uygulama kapsamlı JSON biçimlendiricileri olabilir.

express \ lib \ response.js'ye baktıktan sonra şu rutini kullanıyorum:

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);
}

Bu, javascript işlevlerini geri göndermek için mi? Bunu doğru anlıyor muyum? Ve bunu neden yaptın? Sadece merak
Sam Vloeberghs

1
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);

Yukarıdaki kodu mevcut projemde kullandım.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.