【问题标题】:Node script to import reddit JSON won't work导入 reddit JSON 的节点脚本不起作用
【发布时间】:2015-07-21 08:36:21
【问题描述】:

我想将 reddit json 线程导入我的 mongodb 本地服务器,这样我就可以开始分析它了。请帮帮我。

app.js 文件如下

var MongoClient = require('mongodb').MongoClient
  , request = require('request');

MongoClient.connect('mongodb://localhost:27017/trasmatter', function(err, db) {
    if(err) throw err;
request('https://www.reddit.com/r/Seattle/comments/3e0q5u/why_metro_matters_infographic/.json', function (error, response, body) {
    if (!error && response.statusCode == 200) {
        var obj = JSON.parse(body);

        var stories = obj.data.children.map(function (story) { return story.data; });

        db.collection('reddit').insert(stories, function (err, data) {
                if(err) throw err;

                console.dir(data);

                db.close();
        });
    }
});
});

运行“node app.js”后控制台出错

app.js:11
            var stories = obj.data.children.map(function (story) { return sto
                                  ^
TypeError: Cannot read property 'children' of undefined
    at Request._callback (/Users/yay/code/pulley/app.js:11:35)
    at Request.self.callback (/Users/yay/code/pulley/node_modules/request/request.js:198:22)
    at Request.emit (events.js:110:17)
    at Request.<anonymous> (/Users/yay/code/pulley/node_modules/request/request.js:1057:14)
    at Request.emit (events.js:129:20)
    at IncomingMessage.<anonymous> (/Users/yay/code/pulley/node_modules/request/request.js:1003:12)
    at IncomingMessage.emit (events.js:129:20)
    at _stream_readable.js:908:16
    at process._tickCallback (node.js:355:11)

另一个成功运行的脚本文件。 (我刚插上 另一个链接并更改本地主机链接)

var MongoClient = require('mongodb').MongoClient
     , request = require('request');

   MongoClient.connect('mongodb://localhost:27017/course', function(err, db) {
       if(err) throw err;

       request('http://www.reddit.com/r/technology/.json', function (error, response, body) {
          if (!error && response.statusCode == 200) {
              var obj = JSON.parse(body);

             var stories = obj.data.children.map(function (story) { return story.data; });

              db.collection('reddit').insert(stories, function (err, data) {
                      if(err) throw err;

                      console.dir(data);

                      db.close();
             });

【问题讨论】:

    标签: javascript json node.js mongodb


    【解决方案1】:

    在您的第二个示例中,当请求 http://www.reddit.com/r/technology/.json 时,JSON 结果是一个对象:

    {"kind":"stuff","data":{}}
    

    但是第一个请求结果是一个对象数组:

    [{"kind":"stuff", "data":{}}, {"kind":"stuff","data":{}}]
    

    为了获取您的数据,您需要一个循环或指定您想要的对象:

    var obj = JSON.parse(body);
    console.log(obj[0].data); // for example
    

    【讨论】:

    • 我得到了一个非常独特的控制台日志。 { modhash: '', children: [ { kind: 't3', data: [Object] } ], after: null, before: null } /Users/yay/code/pulleykingcounty/pulley/app.js:12 var stories = obj.data.children.map(function (story) { return stor ^ TypeError: Cannot read property 'children' of undefined at Request._callback (/Users/yay/code/pulleykingcounty/pulley/app.js:12:35) )
    • var obj = JSON.parse(body);控制台.log(obj[1].data);是一个完全不同的错误。
    • 我希望能够索引到孩子": [{"kind": "t3", "data": {"domain": "wired.com", "banned_by":跨度>
    • var stories = obj.data.children.map() 这里也有同样的问题,你尝试将 obj 作为对象访问,但它是一个数组...
    【解决方案2】:

    感谢这个人https://github.com/loganfranken

    看起来https://www.reddit.com/r/Seattle/comments/3e0q5u/why_metro_matters_infographic/.json返回一个数组作为顶级JSON元素,所以我想改变这个:

    obj.data.children

    到这里:

    obj[1].data.children

    应该做的伎俩。

    【讨论】:

      猜你喜欢
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2013-06-17
      • 1970-01-01
      • 2018-04-20
      相关资源
      最近更新 更多