繁体   English   中英

ruby 哈希到 javascript 哈希

[英]ruby hash to javascript hash

我有一个 ruby​​ 哈希值,我想将其转换为特定的 javascript 哈希值。
这里是红宝石哈希keyval

{    
   "Former Administration / Neutral"=>24,     
   "Media Personality / P"=>2,     
   "Journalist / Neutral"=>32,   
   "Consultant / Neutral"=>2,

   ...     

   "Journalist / P"=>11, 
   "Expert / Neutral"=>1, 
   "Activist / Neutral"=>15 
}    

进入 javascript 哈希

{data: "Former Administration / Neutral", frequency: (24) },
{data: "Media Personality / P", frequency: (2) },
{data: "Journalist / Neutral", frequency: (32) },
{data: "Consultant / Neutral", frequency: (2) },

 ...

{data: "Journalist / P", frequency: (11) },
{data: "Expert / Neutral", frequency: (1) },
{data: "Activist / Neutral", frequency: (15) }   

试过

var obj = {};
for (var i = 0; i < <%= keyval.size %>; i++) {
obj["data"] = <%= keyval.keys[i] %>;
obj["frequency"] = '(' + <%= @keyval.values[i] %> + ')';
}

但是循环不起作用obj返回 ruby​​ 哈希frequency=24的第一个元素frequency=24并且不会转义Former Administration的空间。 为什么?

有一个 to_json 方法可以将 ruby​​ 哈希和数组转换为 json 对象。 您可以使用第一个散列创建一个散列数组,然后对其调用 to_json。 然后,您将在 ruby​​ 中进行所有数据操作,最后将格式转换为 json。

hash = {    
   "Former Administration / Neutral"=>24,     
   "Media Personality / P"=>2,     
   "Journalist / Neutral"=>32,   
   "Consultant / Neutral"=>2,
   "Journalist / P"=>11, 
   "Expert / Neutral"=>1, 
   "Activist / Neutral"=>15 
}   
arr = []
hash1.each do |k,v|
  arr << {:data => k, :frequency => v}
end
arr.to_json

"[{"data":"Journalist / P","frequency":11},{"data":"Activist / Neutral","frequency":15},{"data":"Former Administration / Neutral","frequency":24},{"data":"Expert / Neutral","frequency":1},{"data":"Journalist / Neutral","frequency":32},{"data":"Consultant / Neutral","frequency":2},{"data":"Media Personality / P","frequency":2}]"

您说您想要一个“javascript 哈希”,但在您的问题中,最后看起来是一个没有方括号的数组。 我的结果是一个有效的 json 对象表示,它是一个对象数组。 我认为这实际上是你想要的。

您可以使用mapjoin来做到这一点

keyval.map{|k,v| "{data: \"#{k}\", frequency: (#{v}) }" }.join(",\r\n")

在这个例子中,map 方法提供了键作为k和值作为v

尝试这个:

var data = [];
<% for i in 0..@keyval.size-1 { %>
  data.push({});
  data[<%= i %>]["data"] = <%= @keyval.keys[i] %>;
  data[<%= i %>]["frequency"] = '(' + <%= @keyval.values[i] %> + ')';
<% } %>

所以你会得到这些对象的数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM