почему нужно json.parse (buffer.concat (chunks)) дважды? - PullRequest
0 голосов
/ 25 июня 2018

Получая данные JSON через http.request, я могу получать данные порциями, которые я помещаю в массив.когда сигнализируется конец запроса, я объединяю массив с помощью buffer.concat, а затем json.parse этот объект, который дает мне строку.Затем я должен снова json.parse эту строку, чтобы получить объект json.Почему я должен json.parse дважды?Есть ли лучший способ для достижения действительного объекта JSON?Вот мой код:

// requires Node.js http module
var http = require('http');

var options = {
    "method" : "GET",
    "hostname" : "localhost",
    "port" : 3000,
    "path" : `/get`

};

var req = http.request(options, function (res) {
    var chunks = [];
    console.log(res.statusCode);
    res.on("data", function (chunk) {
        // add each element to the array 'chunks'
        chunks.push(chunk);
    });
    // adding a useless comment...
    res.on("end", function () {

        // concatenate the array
        // iterating through this object spits out numbers (ascii byte values?)
        var jsonObj1 = Buffer.concat(chunks);
        console.log(typeof(jsonObj1));    

        // json.parse # 1
        // iterating through this string spits out one character per line
        var jsonObj = JSON.parse(jsonObj1);
        console.log(typeof(jsonObj));

        // json.parse # 2    
        // finally... an actual json object
        var jsonObj2 = JSON.parse(jsonObj);
        console.log(typeof(jsonObj2));

        for (var key in jsonObj2) {
            if (jsonObj2.hasOwnProperty(key)) {
                var val = jsonObj2[key];
                console.log(val);
            }
        }
    });
});

req.on('error', (e) => {
    console.error(`problem with request: ${e.message}`);
  });

req.end();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...