110 votes

Répondre avec un objet JSON dans Node.js (convertir un objet/rayon en chaîne JSON)

Je suis un novice en matière de code back-end et j'essaie de créer une fonction qui me répondra avec une chaîne JSON. J'ai actuellement ceci dans un exemple

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

Il s'agit essentiellement d'imprimer la chaîne de caractères "nombres aléatoires qui doivent être présentés sous forme de JSON". Ce que je veux que ça fasse, c'est répondre avec une chaîne JSON de nombres quelconques. Dois-je mettre un type de contenu différent ? Cette fonction doit-elle transmettre cette valeur à une autre, par exemple du côté du client ?

Merci pour votre aide !

0 votes

Res.json({"Key" : "Value"}) ;

173voto

Kevin Reilly Points 1728

Utilisation de res.json avec 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"
  });
}

Alternativement :

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

78voto

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

Si vous alert(JSON.stringify(objToJson)) vous obtiendrez {"response":"value"}

0 votes

Attention, res.write(JSON.stringify()) attend toujours que vous "terminiez" la réponse. (res.end()) ; express .json() à ceci pour vous

24voto

tyronegcarter Points 161

Vous devez utiliser le JSON.stringify() incluse dans le moteur V8 que le nœud utilise.

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

Edit : Pour autant que je sache, IANA a officiellement enregistré un type MIME pour JSON en tant que application/json en RFC4627 . Il figure également dans la liste des Type de média Internet liste aquí .

0 votes

L'en-tête content-type doit-il également être défini comme application/json ou quelque chose comme ça ? Quelle est la meilleure pratique en la matière ?

1 votes

Oui, pour en faire une réponse valable que le client comprendra. Ajouter : res.writeHead(200, {'Content-Type' : 'application/json'}) before

13voto

Greg Points 3470

Par JamieL 's responder a un autre poste :

Depuis Express.js 3x, l'objet réponse possède une méthode json() qui définit tous les en-têtes correctement pour vous.

Exemple :

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

0 votes

Comment puis-je faire de même avec un fichier JSON ?

0 votes

N'oubliez pas res.end() si vous l'utilisez, j'en avais besoin.

3voto

Amir Arad Points 2124

En express, il peut y avoir des formateurs JSON adaptés à l'application.

après avoir regardé express \lib\response.js J'utilise cette 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);
}

0 votes

Est-ce que c'est pour renvoyer des fonctions javascript ? Est-ce que je comprends bien ? Et pourquoi feriez-vous cela ? Simple curiosité

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X