Ruby on rails Javascript Rails JSON问题

Ruby on rails Javascript Rails JSON问题,ruby-on-rails,ruby,json,Ruby On Rails,Ruby,Json,我有一个来自rails控制器的大型json: @json = {:Nodes => @nodes.as_json(:only => [:ID, :Lat, :Lon])} 我想在视图中的javascript中使用它。在更大的范围内,我想使用json检索lat和lon,以便在Google地图上绘图。然而,现在,我只是想看看我是否能得到所有的分数。我的问题是: 解析javascript文件中json的好方法是什么?(注意:文件的扩展名仍然是html.erb)我尝试了: var stuf

我有一个来自rails控制器的大型json:

@json = {:Nodes => @nodes.as_json(:only => [:ID, :Lat, :Lon])}
我想在视图中的javascript中使用它。在更大的范围内,我想使用json检索lat和lon,以便在Google地图上绘图。然而,现在,我只是想看看我是否能得到所有的分数。我的问题是:

解析javascript文件中json的好方法是什么?(注意:文件的扩展名仍然是html.erb)我尝试了:

var stuff = eval('(' + <%= @json %> + ')'); 
var stuff=eval('('++');

但这似乎不起作用。有人能帮忙吗?非常感谢

由于JSON实际上是所有合法的javascript语法,我经常这样做:

var stuff = <%= @json_hash.to_json %>;
var stuff=;
可能有效的最简单的事情。如果您从不受信任的源获取JSON,最好使用库函数对其进行解析,这将阻止它执行代码。另外,确保在最后一次散列时调用
以_json
。您不希望只使用
对其进行
操作,这是
erb
中的默认设置

@json = {:Nodes => @nodes.map({|n| [n[:ID], n[:Lat], n[:Lon]] })}.to_json
使用prototype,您可以做到这一点:

var stuff = '<%= raw @json %>'.evalJSON();
var stuff=''.evalJSON();
或者使用jquery:

var stuff = jQuery.parseJSON('<%= raw @json %>');
var stuff=jQuery.parseJSON(“”);

在Rails 4中,所有这些解决方案都不适用于我,因此我提出以下建议:

var consumers;
consumers = <%= @consumers.to_json.html_safe %>;

我使用了firebug,它说有一个意想不到的标记:但这不应该是JSOn的一部分吗?你能发布控制器、html和js文件的相关部分吗?当然可以!我的控制器函数如下所示:def map@nodes=Node.all@json={“nodes”=>@nodes.as_json(:only=>[:ID,:Lat,:Lon])}结束,我的html文件如下所示:var stuff=;var json=json.parse(stuff);警报(“文本”);有什么想法吗?Node类只包含ID为Lat和Lon的节点,以及我使用:include符号未包含的其他信息。您可以编辑帖子以包含控制器和视图源吗?(顺便说一句,我相信您可以在注释中使用back-tick-to
pre
),所以我调用了to_-json方法,尽管我在控制器中调用了as_-json方法?我试过了,它给了我一个意外的标记{错误。我很困惑。如果你能给我更多的帮助,那就太好了!我还检查了JSLint以确保我的JSON是有效的,并尝试了JSONParse…怎么了=(我相信
as_json
只返回一个适合调用
到_json
的哈希值。你可以在
rails控制台中尝试它,看看它在做什么。我不明白你是怎么说JSLint的。如果你有一个有效的json字符串,只需在
var
声明后将它放到文档中。嗨,奥斯汀,很抱歉困惑。我只是呈现了我的json,并将其放入JSONlint,JSONlint会检查它是否有效,并且它会被检查出来,这就是为什么我对它为什么不能在javascript中有效解析感到困惑的原因。有什么想法吗?你能发布一些json输出的表示,以及你收到的确切错误消息吗?
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]}));
    }
}