2015-05-08 33 views
0

我正在使用jqCloud插件来生成文字云。该脚本依赖于json以特定模式格式化。我试图让var msg解析出的JSON就像是在var word_arrayobj格式化为json使用jquery

$(function() { 
     var count = 3; 
     $.wordStats.computeTopWords(count, $('body')); 
     var msg = 'Top words:\n'; 
     for (var i = 0, j = $.wordStats.topWords.length; i < j && i <= count; i++) { 
      msg += '\n' + $.wordStats.topWords[i].substring(1) + ': ' + $.wordStats.topWeights[i]; 
     } 
     console.log(msg); 
     //this is what gets printed in the console 
     //Top words: 
     //bag: 46 
     //tote: 30 
     //ugh: 30 

     $.wordStats.clear(); 

     // I am trying to get var msg to spit out json 
     // that is formatted like this 

var word_array = [{ 
       text: "Lorem", 
       weight: 15 
      }, { 
       text: "Ipsum", 
       weight: 9, 
       link: "http://jquery.com/" 
      }, { 
       text: "Dolor", 
       weight: 6, 
       html: { 
        title: "I can haz any html attribute" 
       } 
      } 
      // ...as many words as you want 
     ]; 
     $('#example').jQCloud(word_array); 

回答

1

可以构造一个对象,然后它字符串化虽然你也许不需要并可以只给对象马上到jQCloud。

var json_obj = []; 
    for (var i = 0, j = $.wordStats.topWords.length; i < j && i <= count; i++) { 
     var w = {}; 
     w.text = $.wordStats.topWords[i].substring(1); 
     w.weight = $.wordStats.topWeights[i]; 
     json_obj.push(w); 
    } 
    var msg = JSON.stringify(json_obj); 
+0

谢谢,这让我更加接近,但我现在得到错误'未捕获TypeError:不能分配给只读属性'重量'['似乎是无法钻入阵列并将前括号解释为第一个对象。 – ndesign11

+0

将对象提供给jqcloud时发生错误? – kwangsa

+0

Per charlietfl的评论我将'$ .wordStats.clear();'移到底部,现在可以工作。谢谢大家!我upvoted charlietfl评论,但选择了这个答案,以避免手动创建json。 – ndesign11

2

您正在手动创建字符串,它们对尝试满足输出需求没有任何好处。

您正在查找的数据结构是一组对象。这张地图应该给你你需要的东西

var word_array= $.wordStats.topWords.map(function(item, index){ 
    return { text: item.substring(1) , weight: $.wordStats.topWeights[index] }; 
}); 

$('#example').jQCloud(word_array); 

提示:从来没有尝试手动创建JSON ...这是非常容易出错的。创建数组和/或对象,如果你真的需要这样做,那么JSON将转换整个结构。在这种情况下,你需要一个实际的数组... ...不是JSON

+0

感谢您手动创建json的提示,很高兴知道!我试过你的代码片段,并在控制台收到这个错误。 '未捕获的类型错误:无法读取属性'地图'null' – ndesign11

+1

你把这个放在你的'for'循环的位置和'clear()'之前。了解该错误来自哪个行以及哪个文件也很重要。可能是下一个插件或此代码或? – charlietfl