Node.Js没有加载json的内容,也没有将其解析为JSON?

时间:2015-09-16 00:13:29

标签: javascript node.js

在我的代码中,当我尝试加载json文件的内容然后记录json对象中每个对象的Name属性时,我没有收到任何记录

这是我的代码,感谢所有帮助,谢谢。

var options = {
    host: 'www.roblox.com',
    port: 80,
    path: '/catalog/json?resultsperpage=42',
    method: 'GET'
};

http.request(options, function(res) {
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        chunk = JSON.parse(chunk);
        for (var x in chunk) {
            console.log(chunk[x]['Name']);
        }
        //console.log(chunk);
    });
}).end();

3 个答案:

答案 0 :(得分:3)

当您在Node.js中发出请求时,无法保证所有数据都会包含在一个块中,因此您需要从请求块中构建结果,直到您确定自己拥有所有数据为止。他们(即end事件)。请尝试使用以下代码:

var options = {
    host: 'www.roblox.com',
    port: 80,
    path: '/catalog/json?resultsperpage=42',
    method: 'GET'
};

http.request(options, function(res) {
    res.setEncoding('utf8');

    var result = "";

    res.on('data', function (chunk) {
        result += chunk;
    });

    res.on('end', function() {
        result = JSON.parse(result);
        for (var x in result) {
            console.log(result[x]['Name']);
        }
        console.log(result);
    });
}).end();

有关如何在Node.js中发出HTTP请求的更多信息,请参阅this article

答案 1 :(得分:1)

完整工作版

var http = require('http');
var options = {
    host: 'www.roblox.com',
    port: 80,
    path: '/catalog/json?resultsperpage=42',
    method: 'GET',
    headers: { // note how you add headers
        'content-type': 'application/json'
    }
};

http.request(options, function(res) {
    res.setEncoding('utf8');
    var result = ""; // result will be built up into this

    res.on('data', function (chunk) {
        result += chunk; // add the chunk to the result
    }).on('end', function() { // now parse it and do things
        var json = JSON.parse(result);
        for (var x in json) {
            console.log(json[x]['Name']);
        }
        //console.log(chunk);
    });
}).end();

答案 2 :(得分:1)

您的JSON解析无法正常工作的原因是因为您在“数据”期间过早地调用了这个数据'事件。它只是在那时发送响应块,并且你没有完整的响应(这是应该是有效JSON的文本)。你的工作是否结束了#39;事件

var http = require('http');
var options = {
    'host': 'www.roblox.com',
    'port': 80,
    'path': '/catalog/json?resultsperpage=42',
    'method': 'GET',
    'content-type': 'application/json'
};

http.request(options, function(res) {
    var response_string = "";
    res.setEncoding('utf8');
    res.on('data', function (chunk) {
        response_string += chunk;
    });
    res.on('end', function() {     
        var chunk = JSON.parse(response_string);
        for (var x in chunk) {
            console.log(chunk[x]['Name']);
        }
        console.log(chunk);

    });

}).end();