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

Generating nodes using ruby and displaying them with javascript error

本文关键字:错误 javascript 显示 ruby 节点 使用      更新时间:2023-09-26

所以我试图从我的数据库中提取节点(通过递归地),然后显示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:{}}
                   }
                 };

在我的user_controller中,我使用这个:

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'] = {}

我尝试使用替换方法,但数据变量似乎不是一个字符串,所以我不能只是替换引号。我很感激任何帮助。

谢谢!

输出中额外的'"的原因是您在make_json方法的返回值上调用to_json,这是一个字符串。

很难看出你在make_json中想做什么,但假设你想使用输出作为@data哈希值,然后将其转换为json,我认为你最好让make_json建立哈希并返回。通常,当返回JSON响应时,最简单的解决方案是用Ruby散列和数组构建一个数据结构,然后调用to_json。这里是一个非常简化的例子(我不知道@user_tree是什么,所以我不理解递归步骤,但我希望这能给你一个总的想法):

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'}