Генерация узлов с использованием ruby ​​и отображение их с ошибкой JavaScript - PullRequest
0 голосов
/ 18 ноября 2011

Итак, я пытаюсь извлечь узлы из моей базы данных (проходя через нее рекурсивно) и затем отображая код 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'] = {}

Я пытался использовать метод замены, но переменная данных, похоже, не является строкой, поэтому я не могу просто заменить кавычки.Буду признателен за любую помощь.

Спасибо!

1 Ответ

0 голосов
/ 18 ноября 2011

Причиной дополнительных \" в выходных данных является то, что вы вызываете to_json для возвращаемого значения из вашего make_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'}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...