2015-04-20 7 views
6

Ich versuche, ein einfaches Stück Code mit NodeJS zu schreiben, um die JSON von der Stack Exchange API zurück zu bekommen.NodeJS zurückkehrenden Müll JSON

Dies ist die API I targetting- bin https://api.stackexchange.com/2.2/users?order=desc&sort=reputation&inname=donal%20rafferty&site=stackoverflow

Und hier ist mein Code:

var https = require('https'); //Use NodeJS https module 

function getUserDataByName(userName, callback){ 

var stackOverflowUserURL = 'https://api.stackexchange.com/2.2/users?order=desc&sort=reputation&inname='+encodeURIComponent(userName)+'&site=stackoverflow'; 

https.get(stackOverflowUserURL, function(response){ 
    console.log("headers: ", response.headers); 
    if (response.statusCode == 200) { 
     var jsonString = ''; 
     response.on('data', function (chunk) { 
      jsonString += chunk; 
     }); 
     response.on('end', function() { 
      console.log((jsonString)); 
      callback(JSON.stringify(jsonString)); 
     }); 
    } 
    else{ 
     //error 
     console.log("Error"); 
    } 
}); 
} 

aber wenn ich diese Daten immer laufen wie Text in einem Zustand von Müll wie folgt kommt zurück :

\ "\ u001f \ b \ u0000 \ u0000 \ u0000 \ u0000 \ u0000 \ u0004 \ u0000uRn0 \ fB ږ \ u00132 \ u0010R �m�u\\u0018\\u0004ڢ\\u001d!��Jr=�ȿ�vS\\u0004\\u0005������H����C 7ր Q n \ u0012 \ u0014 {g \\ " ] + zV \ u001f (V % a n | ) QU .O \ u000e \ u0012 Ѹ \ u0005 \ u0003 \ u00130a \ u0006B S Ө C^ bw I \ u000bC b \ u0017e \ u0013 q \\ "D lO` @^\ nq \ u0017 | P? PFz i R \ u000f , [ pu {x \ b ~ k LUV \ u0012 \ u00194 l \ u000e ڕ \ rW \ u001c * \ u001a 9 \ u001e Q + Q > o ; a '\ btI b/ \ u0007 CK \ u0000 j ۯ \ u0003g | \ U0003 \ U0002 \ u0000 \ u0000 \

ich gehe davon aus, etwas falsch mit meiner Codierung/Decodierung gibt es, aber ich kann nicht herausfinden, was diese tun, um zu beheben ?

+0

gzip ist, dass komprimiert, vielleicht? Möglicherweise müssen Sie es mit 'zlib' entpacken. – tadman

+0

@DarrenSweeney" Wenn ich es direkt anrufe, ist es in Ordnung "--- Mit einem Browser? Ein Browser dekodiert automatisch. Die Antwort wird gezippt, schauen Sie sich den Antwort-Header an. –

+0

Ich habe nicht lange mit node.js getan, aber wenn man sich kurz umschaut, kann es sein, dass man die Antwort entzippen muss, die gezippt wird (man schaut sich den Antwortkopf an, der Browser zeigt Klartext, weil er führt diesen Schritt automatisch aus). --- Beispielcode: https://erikberg.com/api/examples/nodejs –

Antwort

5

Sie müssen die Antwort entschlüsseln, wie es

var https = require('https'); //Use NodeJS https module 
var zlib = require("zlib"); 

function getUserDataByName(userName, callback){ 

var stackOverflowUserURL = 'https://api.stackexchange.com/2.2/users?order=desc&sort=reputation&inname='+encodeURIComponent(userName)+'&site=stackoverflow'; 

https.get(stackOverflowUserURL, function(response){ 
    console.log("headers: ", response.headers); 
    console.log(response.statusCode) 
    if (response.statusCode == 200) { 
     var gunzip = zlib.createGunzip(); 
     var jsonString = ''; 
     response.pipe(gunzip); 
     gunzip.on('data', function (chunk) { 
      jsonString += chunk; 
     }); 
     gunzip.on('end', function() { 
      console.log((jsonString)); 
      callback(JSON.stringify(jsonString)); 
     }); 
     gunzip.on('error', function (e) { 
      console.log(e); 
     }); 
    } 
    else{ 
     //error 
     console.log("Error"); 
    } 
}); 
} 
+1

verdammt, dass Sie mich dazu schlagen, ich wusste, dass es gezippt wurde und versuchte herauszufinden, wie man es entschlüsselt: D GJ: D – DrCord