NodeJS返回垃圾JSON

Don*_*rty 7 javascript json node.js

我正在尝试使用NodeJS编写一段简单的代码,以便从堆栈交换API中获取JSON.

这是我所针对的API- https://api.stackexchange.com/2.2/users?order=desc&sort=reputation&inname=donal%20rafferty&site=stackoverflow

这是我的代码:

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");
    }
});
}
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此数据时,数据总是以类似垃圾的文本状态返回,如下所示:

\\\u001f\b\u0000\u0000\u0000\u0000\u0000\u0004 \u0000uR n 0\f B \u0013 2\u0010 R 7 ?m?u\\u0018\\u0004?\\u001d!??Jr=???vS\\u0004\\u0005??????H????Cր Q n \u0012\u0014 {克\\"] + ZV\u001f(V%的|)QU.O\u000e \u0012Ѹ\ u0005\U0003\u00130a \u0006BSӨC^ BWI\u000bCb\u0017e\u0013q \\"DlO` @ ^\NQ\u0017 |?իpFziR\u000f,[PU {X\b〜kLUV\u0012\u00194l \u000e ڕ\rW \u001c *\u001a 9 \u001e Q+ Q > o ; a'\btI b/ \u0007 CK \u0000jۯ\ u0003g |\U0003\U0002\u0000的符\ u0000 \

我假设我的编码/解码有问题,但我无法弄清楚如何解决这个问题?

Tra*_*nce 5

您需要在响应时对解码进行解码

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");
    }
});
}
Run Code Online (Sandbox Code Playgroud)