使用ruby生成节点并使用javascript错误显示它们

使用ruby生成节点并使用javascript错误显示它们,javascript,ruby,json,nodes,Javascript,Ruby,Json,Nodes,因此,我试图通过递归地遍历数据库,然后将json代码显示到javascript库中,从而从数据库中提取节点。问题是库没有标识json数组输出,因为它有额外的引号和斜杠/。代码如下: data = { "nodes": "\"User1:{'color':'green','shape':'dot','label':'You'}, User2:{'color':'green','shape':'dot','label':'You'}, User3:{'color':'green','shape':'

因此,我试图通过递归地遍历数据库,然后将json代码显示到javascript库中,从而从数据库中提取节点。问题是库没有标识json数组输出,因为它有额外的引号和斜杠/。代码如下:

data = {
"nodes":
"\"User1:{'color':'green','shape':'dot','label':'You'},
User2:{'color':'green','shape':'dot','label':'You'},
User3:{'color':'green','shape':'dot','label':'You'}\""
,"edges":{}};
我希望它看起来像这样:

var data = {
                   "nodes":{
                    "You":{'color':'green','shape':'dot','label':'You'},
                     Ben:{'color':'black','shape':'dot','label':'Ben'},
                     David:{'color':'black','shape':'dot','label':'David'}
                   }, 
                   "edges":{
                     You:{ Ben:{}, David:{} },
                     Ben:{ David:{}}
                   }
                 };
在我的用户控制器中,我使用以下命令:

def make_json(node, string = "")
      node[1].each do |n|
      string += node[0] + "{'color':'green','shape':'dot','label':'You'},"
      return make_json(n, string )
      end
      return string + node[0] + "{'color':'green','shape':'dot','label':'You'}"

    end  
最后,这是:

  @data = {}
    @data['nodes'] = make_json(@user_tree[0]).to_json
    @data['edges'] = {}
我尝试使用replace方法,但是数据变量似乎不是字符串,所以我不能只替换引号。我非常感谢任何帮助

谢谢

输出中出现额外\的原因是您正在调用make_json方法返回值的_json,该方法是一个字符串

很难确切地看出您在make_json中想要做什么,但是假设您希望在@data哈希中使用输出作为值,然后将其转换为json,我认为最好让make_json构建一个哈希并返回该值。通常,在返回JSON响应时,最简单的解决方案是用Ruby哈希和数组构建数据结构,然后在此基础上调用_JSON。这是一个非常简化的示例,我不知道@user_树是什么,所以我不理解递归步骤,但我希望这能给您提供一个大致的想法:

def make_json(node, hash = {})
  node[1].each do |n|
    hash[n[0]] = {:color => 'green', :shape => 'dot', :label => n[0]}
  end
  hash
end  
如果您试图自己构造JSON字符串,很容易出错。您所说的目标输出不是有效的JSON,尽管它可能是有效的JavaScript。字符串需要用双引号括起来,例如

"Ben": {"color": "black", "shape": "dot", "label": "Ben"}
而不是:

Ben:{'color':'black','shape':'dot','label':'Ben'}