将已解析的JSON读入数组不起作用?

时间:2018-11-30 09:22:53

标签: javascript node.js json mongodb mongoose

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

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="7dp"
android:layout_marginTop="7.5dp"
android:layout_marginEnd="7dp"
android:layout_marginBottom="7.5dp"
android:background="@drawable/list_background"
android:elevation="5dp"
android:orientation="vertical"
android:paddingBottom="12dp">

<TextView
    android:id="@+id/subject_name"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:padding="15dp"
    android:textAllCaps="true"
    android:textColor="@color/textColor"
    android:textSize="30sp"
    tools:text="Name" />

<TextView
    android:id="@+id/subject_info"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:paddingStart="15dp"
    android:paddingEnd="5dp"
    android:textColor="@color/infoColor"
    android:textSize="16sp"
    tools:text="Info" />

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

这里是扩展代码,以备您查看。

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对象应采用以下格式:

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');
    });
});

1 个答案:

答案 0 :(得分:3)

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

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

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

即:

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

  console.log(articles.length);