to_json вводит странный персонаж - PullRequest
0 голосов
/ 07 декабря 2018

С помощью этого кода я реализовал дерево

groups = {"al1o0"=>"A1", "al2o2"=>"A10", "al2o3"=>"A11", "al1o1"=>"A2"}

map = {}
arr = []

groups.each_with_index do |group, index|
  level = (group.first.split("o")[0].split("al")[1]).to_i - 1
  level = level == 0 ? nil : level
   order = group.first.split("o")[1]
   arr.append({ :id=> index + 1, :order => order, :name => group.last, :parent => level})
end

root = {:id => 0, :name => '', :order => 0, :parent => nil}

arr.each do |e|
  map[e[:id]] = e
end

tree = {}

arr.each do |e|
  pid = e[:parent]
  if pid == nil
    (tree[root] ||= []) << e
  else
    (tree[map[pid]] ||= []) << e
  end
end

дерево имеет

 => {{:id=>0, :name=>"", :order=>0, :parent=>nil}=>[{:id=>1, :order=>"0", :name=>"A1", :parent=>nil}, {:id=>4, :order=>"1", :name=>"A2", :parent=>nil}], {:id=>1, :order=>"0", :name=>"A1", :parent=>nil}=>[{:id=>2, :order=>"2", :name=>"A10", :parent=>1}, {:id=>3, :order=>"3", :name=>"A11", :parent=>1}]} 

До этого все в порядке, но если я сделаю tree.to_json, вывод будет

 => "{\"{:id=\\u003e0, :name=\\u003e\\\"\\\", :order=\\u003e0, :parent=\\u003enil}\":[{\"id\":1,\"order\":\"0\",\"name\":\"A1\",\"parent\":null},{\"id\":4,\"order\":\"1\",\"name\":\"A2\",\"parent\":null}],\"{:id=\\u003e1, :order=\\u003e\\\"0\\\", :name=\\u003e\\\"A1\\\", :parent=\\u003enil}\":[{\"id\":2,\"order\":\"2\",\"name\":\"A10\",\"parent\":1},{\"id\":3,\"order\":\"3\",\"name\":\"A11\",\"parent\":1}]}" 

Почему это изменилось: id => 0 in: id = \ u003e0?

1 Ответ

0 голосов
/ 07 декабря 2018

Прежде всего дерево выглядит странно.

{{:id=>0, :name=>"", :order=>0, :parent=>nil}=>[{:id=>1, :order=>"0", :name=>"A1", :parent=>nil}, ...]}}

вот ключ {: id => 0,: name => "",: order => 0,:parent => nil}

и [{: id => 1,: order => "0",: name => "A1",: parent => nil}, ...] является значением.

Ключ не должен быть хешем.Как это потом назвать.

Вам может понадобиться что-то вроде

{"A1" => {name: 'foo', order: '0'}, 'A2' =>...}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...