首页 > 解决方案 > 将解析的 JSON 读入数组不起作用?

问题描述

我已经在一个应用程序上工作了一段时间,这个特殊功能是一个函数的一部分,它应该从一个 api 读取数据到一个数组中,以便我可以在网页上显示内容。现在,我被困在这里。最初,我有一段更长的代码无法正常工作,但我已将其缩减为更具体的问题:jsonBody.length 按预期返回 5,但articles.length 返回“未定义”而我没有不明白为什么。

request(options, function(err, request, body) {
    var jsonBody = JSON.parse(body);
    var articles = new Article(jsonBody);

    console.log(jsonBody.length);
    console.log(articles.length);

    res.render('news');
});

如果您能帮助我理解,非常感谢。我什至不完全确定我应该使用 var 文章吗?如果我使用 jsonBody,我可以让 JSON 打印到控制台,但如果我这样做,我不确定如何利用我的“新闻”页面上的内容。

这是您想查看的扩展代码。

var marketNewsSchema = new mongoose.Schema({
    datetime: String,
    headline: String,
    source: String,
    url: String,
    summary: String,
    related: String,
    Image: String
});

var Article = mongoose.model('MarketNews', marketNewsSchema);

app.get('/api/marketNews', function(req,  res) {
    var query = {
        'symbol': req.body.id
    };

    var options = {
        url: 'https://api.iextrading.com/1.0/stock/aapl/news/last/5',
        method: 'GET',
        qs: query
    };

    request(options, function(err, request, body) {
        var jsonBody = JSON.parse(body);
        var articles = new Article(jsonBody);

        console.log(jsonBody.length);
        console.log(articles.length);

        res.render('news');
    });
});

原始 JSON 对象应采用以下格式:

[
    {
        "datetime": "2017-06-29T13:14:22-04:00",
        "headline": "Voice Search Technology Creates A New Paradigm For Marketers",
        "source": "Benzinga via QuoteMedia",
        "url": "https://api.iextrading.com/1.0/stock/aapl/article/8348646549980454",
        "summary": "<p>Voice search is likely to grow by leap and bounds, with technological advancements leading to better adoption and fueling the growth cycle, according to Lindsay Boyajian, <a href=\"http://loupventures.com/how-the-future-of-voice-search-affects-marketers-today/\">a guest contributor at Loup Ventu...",
        "related": "AAPL,AMZN,GOOG,GOOGL,MSFT",
        "image": "https://api.iextrading.com/1.0/stock/aapl/news-image/7594023985414148"
    }
]

标签: javascriptnode.jsjsonmongodbmongoose

解决方案


我认为你的问题是它new Article()不是一个数组,但你希望它是一个。

据我所知,Article是一个猫鼬模式 - 不是一个数组。

因此,如果您jsonBody是文章数组,您可能希望映射此数组并为列表中的每个对象生成单独的文章。

IE:

  var jsonBody = JSON.parse(body);
  var articles = jsonBody.map(function(data) { 
     return new Article(data);
  })

  console.log(articles.length);

推荐阅读