Javascript - json数据未正确传输到内存中

时间:2014-02-05 20:23:24

标签: javascript json

我有一个包含16,490行数据的json文件。这是一个片段:

  [
     ...
     ["alrightty",2  ],
     ["alrighttyy",1  ],
     ["alrighty",100  ],
     ["alrightyy",1  ],
     ["alrigt",1  ],
     ...
  ]

这些数据将用于我的情绪分析论文项目。我使用以下代码从json文件中提取数据:

var positive_words_list = {}
function readJSONFile(filename,type) {
    $.ajax({
        type: 'GET',
        url: filename,
        dataType: 'json',
        success: function(data) {
            switch (type) {
                case "pos" : positive_words = data; break;                    
                case "neg" : negative_words = data; break;                    
                case "afinn" : afinn_words = data; break;
            }
        },
        async: false
    });
}

readJSONFile('js/json/positivekeywords.json','pos');

for (var i = 0; i < positive_words.length; i++) {
    row = positive_words[i];
    positive_words_list[row[0]] = row[1];
};

这段代码的作用是从json文件中提取数据,然后将其放入一维数组中,每个单词作为数组索引,数字作为值。

现在我在$(function(){...})中加载网站时运行此代码;所以positive_words_list应该包含有关加载时间的数据。事情是在网站加载后我在控制台中执行positive_words_list.length,它输出63.正如我所说,应该有16,490个条目。

我错过了什么吗?我做错了什么?

谢谢!

约翰

编辑:我应该补充一点,当我在控制台中执行positive_words.length时,我得到正确数量的元素,164,950

2 个答案:

答案 0 :(得分:1)

positive_words_list是一个对象,而不是一个数组,所以你应该得到:

positive_words_list["alrightty"] === 2
positive_words_list["alrighttyy"] === 1

等等。您可以使用以下方法获取对象的键数组:

Object.keys(positive_words_list)
Object.keys(positive_words_list).length

将返回对象键的数组。请注意,Object.keys是大多数当前浏览器中提供的ES5功能。

答案 1 :(得分:1)

据我所知positive_words_list是一个JavaScript对象,它没有开箱即用的length属性。因此,获得幻数63的唯一原因是因为您的数组数组包含单词length作为第一项的实体;类似的东西:

[
  ...
  ['length', 63],
  ...
]

为了获得JavaScript Object中的键数,你可以Object.keys(positive_words_list).length或迭代所有属性并递增计数器:

function size(obj) {
  var key, 
      counter = 0;
  for(key in obj) {
    if(obj.hasOwnProperty(key)) {
      counter++;
    }
  }
  return counter;
}

size(positive_words_list); // <- will return number of properties in object

您的代码段可能会按以下方式修改:

<强> HTML

<h1 id="data">Number of positive words is ...</h1>

<强>的JavaScript

$(function(){

  var positive_words,
      positive_words_list = {};

  function readJSONFile(filename,type) {
      $.ajax({
          type: 'GET',
          url: filename,
          dataType: 'json',
          success: function(data) {
              switch (type) {
                  case "pos" : positive_words = data; break;                    
                  case "neg" : negative_words = data; break;                    
                  case "afinn" : afinn_words = data; break;
              }
          },
          async: false
      });
  }

  readJSONFile('data.json','pos');

  for (var i = 0; i < positive_words.length; i++) {
      row = positive_words[i];
      positive_words_list[row[0]] = row[1];
  };

  $('#data').html('Number of positive words is ' + Object.keys(positive_words_list).length);

});

Plunker:http://plnkr.co/edit/uhHZ1zEuUHXHIQrd1BVa?p=preview