У меня есть следующий 2D-массив cells
:
ID Name Parent
1 Bob 0
2 Alice 1
3 John 2
4 Jane 2
5 Jenny 3
6 Jonny 2
Я хочу преобразовать его во вложенный формат JSON, чтобы каждый объект имел следующие атрибуты:
название
Массив дочерних элементов, в который также входят объекты с именами и массивы детей. В массиве нет круговых вложений; ребенок не может иметь родителей в детстве.
Вот функция, которую я написал:
function getChildren(node){
console.log('Getting Children for' + node)
children = []
for(i = 0;i < cells.length; i++){
if(cells[i][2] == node){
cell = cells[i]
child = {}
child.name = cell[1]
child.children = getChildren(cell[0])
children.push(child)
}
}
return children
}
text = "ID Name Parent\n1 Bob 0\n2 Alice 1\n3 John 2\n4 Jane 2\n5 Jenny 3\n6 Jonny 2\n"
lines = text.split('\n')
cells = []
for(i = 0; i < lines.length; i++){
cells[i] = lines[i].split(/\ +/)
}
Вызов функции на узле 6 getChildren(6)
дает следующий результат:
Получение детей за6
[]
Это правильно, потому что у узла 6 нет потомков.
Но вызов функции на узлах с дочерними элементами, например getChildren(3)
, дает:
Получение детей на 3
Получение детей на 5Object children: Array[1] 0: Object children: Array[1] 0: Object children: Array[1] name: "Jenny" length: 1 name: "Jenny" length: 1 name: "Jenny"
Из вывода консоли кажется, что он вызывает правильные функции, но почему объект для "jenny" бесконечно вложен под всеми дочерними элементами?
Я хочу получить объект JSON, на котором я мог бы использовать JSON.stringify
. Вызов функции на getChildren(3)
дает ошибку
Uncaught TypeError: преобразование круговой структуры в JSON.
Я думаю, это потому, что объект для Jenny бесконечно вложен под каждого ребенка.
JSON.stringify()
на выходе, очевидно, вам нужен объект Javascript, который затем можно было бы преобразовать в строку, чтобы получить от него JSON. Это распространенная ошибка, поскольку люди склонны использовать JSON для описания объекта Javascript, но это совсем не одно и то же, и нам важно знать, о чем вы на самом деле просите. Я предполагаю, что на самом деле вам нужен объект Javascript. - person jfriend00   schedule 21.10.2016