我的rails控制器有一个很大的json:
@json = {:Nodes => @nodes.as_json(:only => [:ID, :Lat, :Lon])}
我想在我的视图中的 JavaScript 中使用它。在更大的范围内,我想使用 json 来检索纬度和 lon,以便在 Google 地图上绘制。但是,现在,我只是想看看我是否可以正确获得所有积分。我的问题是:
解析 javascript 文件中的 json 的好方法是什么?(注意:文件的扩展名仍然是html.erb)我试过:
var stuff = eval('(' + <%= @json %> + ')');
但这似乎不起作用。谁能帮忙?非常感谢!
由于JSON实际上都是合法的JavaScript语法,所以我经常这样做:
var stuff = <%= @json_hash.to_json %>;
最简单的事情可能奏效。如果要从不受信任的源获取 JSON,最好使用库函数来解析它,这将阻止它执行代码。此外,请务必在最终哈希值上调用to_json
。您不想只是to_s
它,这是erb
中的默认值。
@json = {:Nodes => @nodes.map({|n| [n[:ID], n[:Lat], n[:Lon]] })}.to_json
使用原型,您可以这样做:
var stuff = '<%= raw @json %>'.evalJSON();
或使用jquery:
var stuff = jQuery.parseJSON('<%= raw @json %>');
在 Rails 4 中,所有这些解决方案都不适合我,所以我做了这个:
var consumers;
consumers = <%= @consumers.to_json.html_safe %>;
因此,consumers[0]
生成Object
(模型 Rails),您可以在对象中进行迭代转换,例如:
function consumersRubyToJavascriptArray(json){
for (var i = 0; i< json.length; i++) {
consumers.push(new Consumer({ id: json[i][0], name: json[i][2], phone: json[i][3], cpf: json[i][4]}));
}
}