Antworten mit einem JSON-Objekt in Node.js (Konvertieren von Objekt / Array in JSON-Zeichenfolge)

98

Ich bin ein Neuling im Back-End-Code und versuche, eine Funktion zu erstellen, die mir eine JSON-Zeichenfolge antwortet. Ich habe dies derzeit anhand eines Beispiels

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

Dies druckt im Grunde nur die Zeichenfolge "Zufallszahlen, die in Form von JSON kommen sollten". Ich möchte, dass dies mit einer JSON-Zeichenfolge mit beliebigen Zahlen beantwortet wird. Muss ich einen anderen Inhaltstyp eingeben? Sollte diese Funktion diesen Wert an einen anderen auf der Client-Seite übergeben?

Danke für Ihre Hilfe!

Climboid
quelle
res.json ({"Key": "Value"});
Amol M Kulkarni

Antworten:

160

Verwenden von res.json mit 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"
  });
}

Alternative:

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);
}
Kevin Reilly
quelle
76
var objToJson = { };
objToJson.response = response;
response.write(JSON.stringify(objToJson));

Wenn du alert(JSON.stringify(objToJson))wirst{"response":"value"}

Druveen
quelle
Beachten Sie, dass res.write (JSON.stringify ()) immer noch darauf wartet, dass Sie die Antwort "beenden". (erneut senden()) ; Drücken Sie .json () dazu für Sie aus
131
22

Sie müssen die JSON.stringify()Funktion verwenden, die in der V8-Engine enthalten ist, die der Knoten verwendet.

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

Bearbeiten: Soweit ich weiß, hat IANA offiziell einen MIME-Typ für JSON wie application/jsonin RFC4627 registriert . Es ist auch in der Liste Internet Media Type hier aufgeführt .

Tyronegcarter
quelle
Sollte der Inhaltstyp-Header auch auf application / json oder ähnliches gesetzt sein? Was ist die beste Vorgehensweise dafür?
kaufmännisches Und
1
Ja, um eine gültige Antwort zu erhalten, wird der Kunde sie verstehen. Hinzufügen: res.writeHead (200, {'Content-Type': 'application / json'}) vor
Ali
12

Per Jamiel ‚s Antwort auf einen anderen Dienstposten :

Seit Express.js 3x verfügt das Antwortobjekt über eine json () -Methode, mit der alle Header für Sie korrekt festgelegt werden.

Beispiel:

res.json({"foo": "bar"});
Greg
quelle
Wie kann ich dasselbe mit einer JSON-Datei tun?
HGB
Vergessen Sie nicht res.end (), wenn Sie dies verwenden, ich brauchte es
Charles Harring
2

In Express kann es JSON-Formatierer mit Anwendungsbereich geben.

Nachdem ich mir express \ lib \ response.js angesehen habe, verwende ich diese Routine:

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);
}
Amir Arad
quelle
Ist dies für das Zurücksenden von Javascript-Funktionen? Verstehe ich das richtig? Und warum würdest du das tun? Nur neugierig
Sam Vloeberghs
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);

Ich habe den obigen Code in meinem bestehenden Projekt verwendet.

Dev216
quelle