Analyser les données JSON à partir d'une URL

J'essaie de créer une fonction qui peut analyser JSON à partir d'une URL. Voici ce que j'ai jusqu'ici:

function get_json(url) { http.get(url, function(res) { var body = ''; res.on('data', function(chunk) { body += chunk; }); res.on('end', function() { var response = JSON.parse(body); return response; }); }); } var mydata = get_json(...) 

Lorsque j'appelle cette fonction, j'ai des erreurs. Comment puis-je retourner JSON analysé à partir de cette fonction?

Votre return response; Ne sera pas utile. Vous pouvez passer une fonction en tant que argument à get_json , et faire en sorte que le résultat soit obtenu. Ensuite, à la place de la return response; de return response; , Invoquer la fonction. Donc, si le paramètre s'appelle callback , vous devez faire un callback(response); .

 // ----receive function----v function get_json(url, callback) { http.get(url, function(res) { var body = ''; res.on('data', function(chunk) { body += chunk; }); res.on('end', function() { var response = JSON.parse(body); // call function ----v callback(response); }); }); } // -----------the url---v ------------the callback---v var mydata = get_json("http://webapp.armadealo.com/home.json", function (resp) { console.log(resp); }); 

Passer des fonctions en tant que rappel est essentiel pour comprendre quand vous utilisez NodeJS.

L'appel HTTP est asynchrone, donc vous devez utiliser un rappel pour récupérer une valeur résultante. Un appel de return dans une fonction asynchrone va simplement arrêter l'exécution.

 function get_json(url, fn) { http.get(url, function(res) { var body = ''; res.on('data', function(chunk) { body += chunk; }); res.on('end', function() { var response = JSON.parse(body); fn(response); }); }); }; get_json(url, function(json) { // the JSON data is here }); 

Dans cet exemple, la function(json) {} est passée dans la fonction get_json() comme fn() et lorsque les données sont prêtes, fn() est appelé, vous permettant de récupérer le JSON.

Dans le cas où une personne est à la recherche d'une solution qui n'inclut pas les callbaks

  function getJSON(url) { var resp ; var xmlHttp ; resp = '' ; xmlHttp = new XMLHttpRequest(); if(xmlHttp != null) { xmlHttp.open( "GET", url, false ); xmlHttp.send( null ); resp = xmlHttp.responseText; } return resp ; } 

Ensuite, vous pouvez l'utiliser comme ça

 var gjson ; gjson = getJSON('./first.geojson') ;