Skip to content

Instantly share code, notes, and snippets.

@robschmuecker
Last active January 31, 2024 18:30
  • Star 6 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
Star You must be signed in to star a gist
Save robschmuecker/7926762 to your computer and use it in GitHub Desktop.
Drag and drop, collapsible d3.js Tree with 50,000 nodes

This is an example of a collapsible drag and drop tree implementing slightly modified code from https://gist.github.com/robschmuecker/7880033

This is posted in order to demonstrate a viable answer for a Stack Overflow question http://stackoverflow.com/questions/20539922/has-anyone-produced-a-virtualised-javascript-tree-for-thousands-of-nodes

The only difference between this gist and the one referenced above is that the JSON file has changed. Each node contains 15 children and the depth is 4. Hence over 50,000 nodes.

The performance is fine if not too many of the nodes are present at once in the DOM. The JSON was contructed at http://www.json-generator.com/ with the following markup

{
        user_id: '{{index}}',
        name: '{{firstName}} {{surname}}',
        children: [
            '{{repeat(15)}}',
            {
                user_id: '{{index}}',
                name: '{{firstName}} {{surname}}',
                children: [
                    '{{repeat(15)}}',
                    {
                        user_id: '{{index}}',
                        name: '{{firstName}} {{surname}}',
                        children: [
                    '{{repeat(15)}}',
                    {
                        user_id: '{{index}}',
                        name: '{{firstName}} {{surname}}',
                        children: [
                        '{{repeat(15)}}',
                    {
                        user_id: '{{index}}',
                        name: '{{firstName}} {{surname}}'
                    }
                        ]
                    }
                ]
                    }
                ]
            }
        ]
}

For any help/queries, http://www.robschmuecker.com @robschmuecker or robert.schmuecker at gmail dot com

// Get JSON data
treeJSON = d3.json("manyNodes.json", function(error, treeData) {
// Calculate total nodes, max label length
var totalNodes = 0;
var maxLabelLength = 0;
// variables for drag/drop
var selectedNode = null;
var draggingNode = null;
// panning variables
var panSpeed = 200;
var panBoundary = 20; // Within 20px from edges will pan when dragging.
// Misc. variables
var i = 0;
var duration = 750;
var root;
// size of the diagram
var viewerWidth = $(document).width();
var viewerHeight = $(document).height();
var tree = d3.layout.tree()
.size([viewerHeight, viewerWidth]);
// define a d3 diagonal projection for use by the node paths later on.
var diagonal = d3.svg.diagonal()
.projection(function(d) {
return [d.y, d.x];
});
// A recursive helper function for performing some setup by walking through all nodes
function visit(parent, visitFn, childrenFn) {
if (!parent) return;
visitFn(parent);
var children = childrenFn(parent);
if (children) {
var count = children.length;
for (var i = 0; i < count; i++) {
visit(children[i], visitFn, childrenFn);
}
}
}
// Call visit function to establish maxLabelLength
visit(treeData, function(d) {
totalNodes++;
maxLabelLength = Math.max(d.name.length, maxLabelLength);
}, function(d) {
return d.children && d.children.length > 0 ? d.children : null;
});
// sort the tree according to the node names
function sortTree() {
tree.sort(function(a, b) {
return b.name.toLowerCase() < a.name.toLowerCase() ? 1 : -1;
});
}
// Sort the tree initially incase the JSON isn't in a sorted order.
sortTree();
// TODO: Pan function, can be better implemented.
function pan(domNode, direction) {
var speed = panSpeed;
if (panTimer) {
clearTimeout(panTimer);
translateCoords = d3.transform(svgGroup.attr("transform"));
if (direction == 'left' || direction == 'right') {
translateX = direction == 'left' ? translateCoords.translate[0] + speed : translateCoords.translate[0] - speed;
translateY = translateCoords.translate[1];
} else if (direction == 'up' || direction == 'down') {
translateX = translateCoords.translate[0];
translateY = direction == 'up' ? translateCoords.translate[1] + speed : translateCoords.translate[1] - speed;
}
scaleX = translateCoords.scale[0];
scaleY = translateCoords.scale[1];
scale = zoomListener.scale();
svgGroup.transition().attr("transform", "translate(" + translateX + "," + translateY + ")scale(" + scale + ")");
d3.select(domNode).select('g.node').attr("transform", "translate(" + translateX + "," + translateY + ")");
zoomListener.scale(zoomListener.scale());
zoomListener.translate([translateX, translateY]);
panTimer = setTimeout(function() {
pan(domNode, speed, direction);
}, 50);
}
}
// Define the zoom function for the zoomable tree
function zoom() {
svgGroup.attr("transform", "translate(" + d3.event.translate + ")scale(" + d3.event.scale + ")");
}
// define the zoomListener which calls the zoom function on the "zoom" event constrained within the scaleExtents
var zoomListener = d3.behavior.zoom().scaleExtent([0.1, 3]).on("zoom", zoom);
function initiateDrag(d, domNode) {
draggingNode = d;
d3.select(domNode).select('.ghostCircle').attr('pointer-events', 'none');
d3.selectAll('.ghostCircle').attr('class', 'ghostCircle show');
d3.select(domNode).attr('class', 'node activeDrag');
svgGroup.selectAll("g.node").sort(function(a, b) { // select the parent and sort the path's
if (a.id != draggingNode.id) return 1; // a is not the hovered element, send "a" to the back
else return -1; // a is the hovered element, bring "a" to the front
});
// if nodes has children, remove the links and nodes
if (nodes.length > 1) {
// remove link paths
links = tree.links(nodes);
nodePaths = svgGroup.selectAll("path.link")
.data(links, function(d) {
return d.target.id;
}).remove();
// remove child nodes
nodesExit = svgGroup.selectAll("g.node")
.data(nodes, function(d) {
return d.id;
}).filter(function(d, i) {
if (d.id == draggingNode.id) {
return false;
}
return true;
}).remove();
}
// remove parent link
parentLink = tree.links(tree.nodes(draggingNode.parent));
svgGroup.selectAll('path.link').filter(function(d, i) {
if (d.target.id == draggingNode.id) {
return true;
}
return false;
}).remove();
dragStarted = null;
}
// define the baseSvg, attaching a class for styling and the zoomListener
var baseSvg = d3.select("#tree-container").append("svg")
.attr("width", viewerWidth)
.attr("height", viewerHeight)
.attr("class", "overlay")
.call(zoomListener);
// Define the drag listeners for drag/drop behaviour of nodes.
dragListener = d3.behavior.drag()
.on("dragstart", function(d) {
if (d == root) {
return;
}
dragStarted = true;
nodes = tree.nodes(d);
d3.event.sourceEvent.stopPropagation();
// it's important that we suppress the mouseover event on the node being dragged. Otherwise it will absorb the mouseover event and the underlying node will not detect it d3.select(this).attr('pointer-events', 'none');
})
.on("drag", function(d) {
if (d == root) {
return;
}
if (dragStarted) {
domNode = this;
initiateDrag(d, domNode);
}
// get coords of mouseEvent relative to svg container to allow for panning
relCoords = d3.mouse($('svg').get(0));
if (relCoords[0] < panBoundary) {
panTimer = true;
pan(this, 'left');
} else if (relCoords[0] > ($('svg').width() - panBoundary)) {
panTimer = true;
pan(this, 'right');
} else if (relCoords[1] < panBoundary) {
panTimer = true;
pan(this, 'up');
} else if (relCoords[1] > ($('svg').height() - panBoundary)) {
panTimer = true;
pan(this, 'down');
} else {
try {
clearTimeout(panTimer);
} catch (e) {
}
}
d.x0 += d3.event.dy;
d.y0 += d3.event.dx;
var node = d3.select(this);
node.attr("transform", "translate(" + d.y0 + "," + d.x0 + ")");
updateTempConnector();
}).on("dragend", function(d) {
if (d == root) {
return;
}
domNode = this;
if (selectedNode) {
// now remove the element from the parent, and insert it into the new elements children
var index = draggingNode.parent.children.indexOf(draggingNode);
if (index > -1) {
draggingNode.parent.children.splice(index, 1);
}
if (typeof selectedNode.children !== 'undefined' || typeof selectedNode._children !== 'undefined') {
if (typeof selectedNode.children !== 'undefined') {
selectedNode.children.push(draggingNode);
} else {
selectedNode._children.push(draggingNode);
}
} else {
selectedNode.children = [];
selectedNode.children.push(draggingNode);
}
// Make sure that the node being added to is expanded so user can see added node is correctly moved
expand(selectedNode);
sortTree();
endDrag();
} else {
endDrag();
}
});
function endDrag() {
selectedNode = null;
d3.selectAll('.ghostCircle').attr('class', 'ghostCircle');
d3.select(domNode).attr('class', 'node');
// now restore the mouseover event or we won't be able to drag a 2nd time
d3.select(domNode).select('.ghostCircle').attr('pointer-events', '');
updateTempConnector();
if (draggingNode !== null) {
update(root);
centerNode(draggingNode);
draggingNode = null;
}
}
// Helper functions for collapsing and expanding nodes.
function collapse(d) {
if (d.children) {
d._children = d.children;
d._children.forEach(collapse);
d.children = null;
}
}
function expand(d) {
if (d._children) {
d.children = d._children;
d.children.forEach(expand);
d._children = null;
}
}
var overCircle = function(d) {
selectedNode = d;
updateTempConnector();
};
var outCircle = function(d) {
selectedNode = null;
updateTempConnector();
};
// Function to update the temporary connector indicating dragging affiliation
var updateTempConnector = function() {
var data = [];
if (draggingNode !== null && selectedNode !== null) {
// have to flip the source coordinates since we did this for the existing connectors on the original tree
data = [{
source: {
x: selectedNode.y0,
y: selectedNode.x0
},
target: {
x: draggingNode.y0,
y: draggingNode.x0
}
}];
}
var link = svgGroup.selectAll(".templink").data(data);
link.enter().append("path")
.attr("class", "templink")
.attr("d", d3.svg.diagonal())
.attr('pointer-events', 'none');
link.attr("d", d3.svg.diagonal());
link.exit().remove();
};
// Function to center node when clicked/dropped so node doesn't get lost when collapsing/moving with large amount of children.
function centerNode(source) {
scale = zoomListener.scale();
x = -source.y0;
y = -source.x0;
x = x * scale + viewerWidth / 2;
y = y * scale + viewerHeight / 2;
d3.select('g').transition()
.duration(duration)
.attr("transform", "translate(" + x + "," + y + ")scale(" + scale + ")");
zoomListener.scale(scale);
zoomListener.translate([x, y]);
}
// Toggle children function
function toggleChildren(d) {
if (d.children) {
d._children = d.children;
d.children = null;
} else if (d._children) {
d.children = d._children;
d._children = null;
}
return d;
}
// Toggle children on click.
function click(d) {
if (d3.event.defaultPrevented) return; // click suppressed
d = toggleChildren(d);
update(d);
centerNode(d);
}
function update(source) {
// Compute the new height, function counts total children of root node and sets tree height accordingly.
// This prevents the layout looking squashed when new nodes are made visible or looking sparse when nodes are removed
// This makes the layout more consistent.
var levelWidth = [1];
var childCount = function(level, n) {
if (n.children && n.children.length > 0) {
if (levelWidth.length <= level + 1) levelWidth.push(0);
levelWidth[level + 1] += n.children.length;
n.children.forEach(function(d) {
childCount(level + 1, d);
});
}
};
childCount(0, root);
var newHeight = d3.max(levelWidth) * 25; // 25 pixels per line
tree = tree.size([newHeight, viewerWidth]);
// Compute the new tree layout.
var nodes = tree.nodes(root).reverse(),
links = tree.links(nodes);
// Set widths between levels based on maxLabelLength.
nodes.forEach(function(d) {
d.y = (d.depth * (maxLabelLength * 10)); //maxLabelLength * 10px
// alternatively to keep a fixed scale one can set a fixed depth per level
// Normalize for fixed-depth by commenting out below line
// d.y = (d.depth * 500); //500px per level.
});
// Update the nodes…
node = svgGroup.selectAll("g.node")
.data(nodes, function(d) {
return d.id || (d.id = ++i);
});
// Enter any new nodes at the parent's previous position.
var nodeEnter = node.enter().append("g")
.call(dragListener)
.attr("class", "node")
.attr("transform", function(d) {
return "translate(" + source.y0 + "," + source.x0 + ")";
})
.on('click', click);
nodeEnter.append("circle")
.attr('class', 'nodeCircle')
.attr("r", 0)
.style("fill", function(d) {
return d._children ? "lightsteelblue" : "#fff";
});
nodeEnter.append("text")
.attr("x", function(d) {
return d.children || d._children ? -10 : 10;
})
.attr("dy", ".35em")
.attr('class', 'nodeText')
.attr("text-anchor", function(d) {
return d.children || d._children ? "end" : "start";
})
.text(function(d) {
return d.name;
})
.style("fill-opacity", 0);
// phantom node to give us mouseover in a radius around it
nodeEnter.append("circle")
.attr('class', 'ghostCircle')
.attr("r", 30)
.attr("opacity", 0.2) // change this to zero to hide the target area
.style("fill", "red")
.attr('pointer-events', 'mouseover')
.on("mouseover", function(node) {
overCircle(node);
})
.on("mouseout", function(node) {
outCircle(node);
});
// Update the text to reflect whether node has children or not.
node.select('text')
.attr("x", function(d) {
return d.children || d._children ? -10 : 10;
})
.attr("text-anchor", function(d) {
return d.children || d._children ? "end" : "start";
})
.text(function(d) {
return d.name;
});
// Change the circle fill depending on whether it has children and is collapsed
node.select("circle.nodeCircle")
.attr("r", 4.5)
.style("fill", function(d) {
return d._children ? "lightsteelblue" : "#fff";
});
// Transition nodes to their new position.
var nodeUpdate = node.transition()
.duration(duration)
.attr("transform", function(d) {
return "translate(" + d.y + "," + d.x + ")";
});
// Fade the text in
nodeUpdate.select("text")
.style("fill-opacity", 1);
// Transition exiting nodes to the parent's new position.
var nodeExit = node.exit().transition()
.duration(duration)
.attr("transform", function(d) {
return "translate(" + source.y + "," + source.x + ")";
})
.remove();
nodeExit.select("circle")
.attr("r", 0);
nodeExit.select("text")
.style("fill-opacity", 0);
// Update the links…
var link = svgGroup.selectAll("path.link")
.data(links, function(d) {
return d.target.id;
});
// Enter any new links at the parent's previous position.
link.enter().insert("path", "g")
.attr("class", "link")
.attr("d", function(d) {
var o = {
x: source.x0,
y: source.y0
};
return diagonal({
source: o,
target: o
});
});
// Transition links to their new position.
link.transition()
.duration(duration)
.attr("d", diagonal);
// Transition exiting nodes to the parent's new position.
link.exit().transition()
.duration(duration)
.attr("d", function(d) {
var o = {
x: source.x,
y: source.y
};
return diagonal({
source: o,
target: o
});
})
.remove();
// Stash the old positions for transition.
nodes.forEach(function(d) {
d.x0 = d.x;
d.y0 = d.y;
});
}
// Append a group which holds all nodes and which the zoom Listener can act upon.
var svgGroup = baseSvg.append("g");
// Define the root
root = treeData;
root.x0 = viewerHeight / 2;
root.y0 = 0;
// Collapse all children of roots children before rendering.
root.children.forEach(function(child){
collapse(child);
});
// Layout the tree initially and center on the root node.
update(root);
centerNode(root);
});
<!DOCTYPE html>
<meta charset="utf-8">
<style type="text/css">
.node {
cursor: pointer;
}
.overlay{
background-color:#EEE;
}
.node circle {
fill: #fff;
stroke: steelblue;
stroke-width: 1.5px;
}
.node text {
font-size:10px;
font-family:sans-serif;
}
.link {
fill: none;
stroke: #ccc;
stroke-width: 1.5px;
}
.templink {
fill: none;
stroke: red;
stroke-width: 3px;
}
.ghostCircle.show{
display:block;
}
.ghostCircle, .activeDrag .ghostCircle{
display: none;
}
</style>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="dndTree.js"></script>
<body>
<div id="tree-container"></div>
</body>
</html>
This file has been truncated, but you can view the full file.
{
"user_id": 0,
"name": "Root Node",
"children": [
{
"user_id": 0,
"name": "Flossie Hickman",
"children": [
{
"user_id": 0,
"name": "Violet Arnold",
"children": [
{
"user_id": 0,
"name": "Buckner Carrillo",
"children": [
{
"user_id": 0,
"name": "Scott Poole"
},
{
"user_id": 1,
"name": "Travis Compton"
},
{
"user_id": 2,
"name": "Brenda Galloway"
},
{
"user_id": 3,
"name": "Paula Dennis"
},
{
"user_id": 4,
"name": "Deleon Golden"
},
{
"user_id": 5,
"name": "Russell Mcknight"
},
{
"user_id": 6,
"name": "Fischer Serrano"
},
{
"user_id": 7,
"name": "Cochran Hart"
},
{
"user_id": 8,
"name": "Martin Rollins"
},
{
"user_id": 9,
"name": "Karin Lara"
},
{
"user_id": 10,
"name": "Nannie Blanchard"
},
{
"user_id": 11,
"name": "Sharron Stark"
},
{
"user_id": 12,
"name": "Mcgowan Holcomb"
},
{
"user_id": 13,
"name": "Snider Barrett"
},
{
"user_id": 14,
"name": "Janice Atkins"
}
]
},
{
"user_id": 1,
"name": "Payne Mack",
"children": [
{
"user_id": 0,
"name": "Barker Patrick"
},
{
"user_id": 1,
"name": "Guerrero Mathews"
},
{
"user_id": 2,
"name": "Gaines Greer"
},
{
"user_id": 3,
"name": "Estelle Morgan"
},
{
"user_id": 4,
"name": "Pollard Barnes"
},
{
"user_id": 5,
"name": "Alison Shepard"
},
{
"user_id": 6,
"name": "Imogene Hernandez"
},
{
"user_id": 7,
"name": "Rosalinda Morrow"
},
{
"user_id": 8,
"name": "Baxter Robbins"
},
{
"user_id": 9,
"name": "Mercado Stevens"
},
{
"user_id": 10,
"name": "Price Valentine"
},
{
"user_id": 11,
"name": "Mara Richards"
},
{
"user_id": 12,
"name": "Tommie Mcgee"
},
{
"user_id": 13,
"name": "Shepherd Pacheco"
},
{
"user_id": 14,
"name": "Gibson Preston"
}
]
},
{
"user_id": 2,
"name": "Cox Slater",
"children": [
{
"user_id": 0,
"name": "Celia Jensen"
},
{
"user_id": 1,
"name": "Myers Warner"
},
{
"user_id": 2,
"name": "Kane Burns"
},
{
"user_id": 3,
"name": "Karyn Gonzalez"
},
{
"user_id": 4,
"name": "Winnie Perez"
},
{
"user_id": 5,
"name": "Finley Cook"
},
{
"user_id": 6,
"name": "Elizabeth Garrison"
},
{
"user_id": 7,
"name": "Daniel Simmons"
},
{
"user_id": 8,
"name": "Jan Luna"
},
{
"user_id": 9,
"name": "Leonor Sears"
},
{
"user_id": 10,
"name": "Marquita Santana"
},
{
"user_id": 11,
"name": "Boyer Hanson"
},
{
"user_id": 12,
"name": "Brock Hyde"
},
{
"user_id": 13,
"name": "Candice Jefferson"
},
{
"user_id": 14,
"name": "Odonnell Vargas"
}
]
},
{
"user_id": 3,
"name": "Jodi Duran",
"children": [
{
"user_id": 0,
"name": "Carey Quinn"
},
{
"user_id": 1,
"name": "Lilia Vega"
},
{
"user_id": 2,
"name": "Marci Parker"
},
{
"user_id": 3,
"name": "Marguerite Bartlett"
},
{
"user_id": 4,
"name": "Jill Cooper"
},
{
"user_id": 5,
"name": "Bettie Curry"
},
{
"user_id": 6,
"name": "Owens Shannon"
},
{
"user_id": 7,
"name": "Lakeisha Rasmussen"
},
{
"user_id": 8,
"name": "House Glover"
},
{
"user_id": 9,
"name": "Forbes Short"
},
{
"user_id": 10,
"name": "Francis Finley"
},
{
"user_id": 11,
"name": "Darcy Singleton"
},
{
"user_id": 12,
"name": "Terry Villarreal"
},
{
"user_id": 13,
"name": "Graciela Wooten"
},
{
"user_id": 14,
"name": "Malone Dunlap"
}
]
},
{
"user_id": 4,
"name": "Sabrina Harrell",
"children": [
{
"user_id": 0,
"name": "Dalton Norman"
},
{
"user_id": 1,
"name": "Barrett Morales"
},
{
"user_id": 2,
"name": "Daniels Booth"
},
{
"user_id": 3,
"name": "Maxwell Rich"
},
{
"user_id": 4,
"name": "Bennett Washington"
},
{
"user_id": 5,
"name": "Lelia Banks"
},
{
"user_id": 6,
"name": "Georgette Joyce"
},
{
"user_id": 7,
"name": "Kaitlin Irwin"
},
{
"user_id": 8,
"name": "Lacey Case"
},
{
"user_id": 9,
"name": "Reyes Jenkins"
},
{
"user_id": 10,
"name": "Rios Dunn"
},
{
"user_id": 11,
"name": "Walsh Robles"
},
{
"user_id": 12,
"name": "Nieves Ratliff"
},
{
"user_id": 13,
"name": "Alta Brennan"
},
{
"user_id": 14,
"name": "Theresa Gilliam"
}
]
},
{
"user_id": 5,
"name": "Woods Howe",
"children": [
{
"user_id": 0,
"name": "Adkins Mcguire"
},
{
"user_id": 1,
"name": "Blake Watts"
},
{
"user_id": 2,
"name": "Renee Floyd"
},
{
"user_id": 3,
"name": "Decker Riggs"
},
{
"user_id": 4,
"name": "Chen Benton"
},
{
"user_id": 5,
"name": "English Russo"
},
{
"user_id": 6,
"name": "Wood Cohen"
},
{
"user_id": 7,
"name": "Aisha Molina"
},
{
"user_id": 8,
"name": "Vargas Hensley"
},
{
"user_id": 9,
"name": "Rowena Ray"
},
{
"user_id": 10,
"name": "Clay Farmer"
},
{
"user_id": 11,
"name": "Kathryn Langley"
},
{
"user_id": 12,
"name": "Claudia Dominguez"
},
{
"user_id": 13,
"name": "Jeanne White"
},
{
"user_id": 14,
"name": "Mcleod Holden"
}
]
},
{
"user_id": 6,
"name": "Holmes Wiley",
"children": [
{
"user_id": 0,
"name": "Leach Jacobs"
},
{
"user_id": 1,
"name": "Harriett Macdonald"
},
{
"user_id": 2,
"name": "Castro Bridges"
},
{
"user_id": 3,
"name": "Barber Stephens"
},
{
"user_id": 4,
"name": "Burnett Mills"
},
{
"user_id": 5,
"name": "Freida Jacobson"
},
{
"user_id": 6,
"name": "Juliana Norton"
},
{
"user_id": 7,
"name": "Lindsey Peck"
},
{
"user_id": 8,
"name": "Fran Spence"
},
{
"user_id": 9,
"name": "Sargent Hendrix"
},
{
"user_id": 10,
"name": "Marian Bates"
},
{
"user_id": 11,
"name": "Moses Buck"
},
{
"user_id": 12,
"name": "Fisher Whitley"
},
{
"user_id": 13,
"name": "Tammie Salas"
},
{
"user_id": 14,
"name": "Ratliff Wallace"
}
]
},
{
"user_id": 7,
"name": "Mallory Terry",
"children": [
{
"user_id": 0,
"name": "Rena Levine"
},
{
"user_id": 1,
"name": "Karen Leonard"
},
{
"user_id": 2,
"name": "Reese Copeland"
},
{
"user_id": 3,
"name": "Rosemarie Mays"
},
{
"user_id": 4,
"name": "Lydia Cole"
},
{
"user_id": 5,
"name": "Estella Hood"
},
{
"user_id": 6,
"name": "Felicia Bradford"
},
{
"user_id": 7,
"name": "Suzanne Strong"
},
{
"user_id": 8,
"name": "Hannah Parks"
},
{
"user_id": 9,
"name": "Melendez Cruz"
},
{
"user_id": 10,
"name": "Snow Stout"
},
{
"user_id": 11,
"name": "Lillie Guzman"
},
{
"user_id": 12,
"name": "Patrica Dotson"
},
{
"user_id": 13,
"name": "Zimmerman Fields"
},
{
"user_id": 14,
"name": "Ruth Wong"
}
]
},
{
"user_id": 8,
"name": "Eileen Jennings",
"children": [
{
"user_id": 0,
"name": "Alford Kelley"
},
{
"user_id": 1,
"name": "Jaime Drake"
},
{
"user_id": 2,
"name": "Fuentes Frazier"
},
{
"user_id": 3,
"name": "Combs Oliver"
},
{
"user_id": 4,
"name": "Dixie Davenport"
},
{
"user_id": 5,
"name": "Bishop Montgomery"
},
{
"user_id": 6,
"name": "Elisa Rogers"
},
{
"user_id": 7,
"name": "Dillard Gates"
},
{
"user_id": 8,
"name": "Amalia Livingston"
},
{
"user_id": 9,
"name": "Marva Small"
},
{
"user_id": 10,
"name": "Jones Frank"
},
{
"user_id": 11,
"name": "Gonzalez Moss"
},
{
"user_id": 12,
"name": "Albert Rutledge"
},
{
"user_id": 13,
"name": "Janell Burks"
},
{
"user_id": 14,
"name": "Coleen Saunders"
}
]
},
{
"user_id": 9,
"name": "Alana Shepherd",
"children": [
{
"user_id": 0,
"name": "Compton Newman"
},
{
"user_id": 1,
"name": "Chase Shaw"
},
{
"user_id": 2,
"name": "Nancy Ryan"
},
{
"user_id": 3,
"name": "Terra Sawyer"
},
{
"user_id": 4,
"name": "Lang Landry"
},
{
"user_id": 5,
"name": "Cindy Haynes"
},
{
"user_id": 6,
"name": "Elisabeth Mercer"
},
{
"user_id": 7,
"name": "Deirdre Moody"
},
{
"user_id": 8,
"name": "Juliette Houston"
},
{
"user_id": 9,
"name": "Hopkins Knapp"
},
{
"user_id": 10,
"name": "Keith Charles"
},
{
"user_id": 11,
"name": "Rosario Hooper"
},
{
"user_id": 12,
"name": "Hooper Martin"
},
{
"user_id": 13,
"name": "Sullivan Harrington"
},
{
"user_id": 14,
"name": "Melba Lawson"
}
]
},
{
"user_id": 10,
"name": "Jaclyn Goff",
"children": [
{
"user_id": 0,
"name": "Haley Gibson"
},
{
"user_id": 1,
"name": "Moon Lambert"
},
{
"user_id": 2,
"name": "Maria Sheppard"
},
{
"user_id": 3,
"name": "Rose Martinez"
},
{
"user_id": 4,
"name": "Natalia Leblanc"
},
{
"user_id": 5,
"name": "Snyder Gould"
},
{
"user_id": 6,
"name": "Hurley Garner"
},
{
"user_id": 7,
"name": "Mitchell Dale"
},
{
"user_id": 8,
"name": "Jayne Cochran"
},
{
"user_id": 9,
"name": "Gena Adams"
},
{
"user_id": 10,
"name": "Norton Fuller"
},
{
"user_id": 11,
"name": "Mclaughlin Gordon"
},
{
"user_id": 12,
"name": "Herman Cobb"
},
{
"user_id": 13,
"name": "Mcmahon Klein"
},
{
"user_id": 14,
"name": "Jeri Bradshaw"
}
]
},
{
"user_id": 11,
"name": "Megan Koch",
"children": [
{
"user_id": 0,
"name": "Malinda Williams"
},
{
"user_id": 1,
"name": "Denise Schmidt"
},
{
"user_id": 2,
"name": "Cooper Whitaker"
},
{
"user_id": 3,
"name": "Maldonado Gonzales"
},
{
"user_id": 4,
"name": "Carly Mccray"
},
{
"user_id": 5,
"name": "Jarvis Huber"
},
{
"user_id": 6,
"name": "Acosta Colon"
},
{
"user_id": 7,
"name": "Howe Mcgowan"
},
{
"user_id": 8,
"name": "Sanford Pate"
},
{
"user_id": 9,
"name": "Keri Miller"
},
{
"user_id": 10,
"name": "Rosanna Benson"
},
{
"user_id": 11,
"name": "Kari Holman"
},
{
"user_id": 12,
"name": "Parker Solomon"
},
{
"user_id": 13,
"name": "Lindsay Hayden"
},
{
"user_id": 14,
"name": "Lakisha Mccullough"
}
]
},
{
"user_id": 12,
"name": "Bertie Tucker",
"children": [
{
"user_id": 0,
"name": "Hatfield Reynolds"
},
{
"user_id": 1,
"name": "Cunningham Hewitt"
},
{
"user_id": 2,
"name": "Zelma Wiggins"
},
{
"user_id": 3,
"name": "Clements Michael"
},
{
"user_id": 4,
"name": "Greene Gaines"
},
{
"user_id": 5,
"name": "Hanson Cash"
},
{
"user_id": 6,
"name": "Fern Kim"
},
{
"user_id": 7,
"name": "Flores Carr"
},
{
"user_id": 8,
"name": "Greta Byers"
},
{
"user_id": 9,
"name": "Frazier Hendricks"
},
{
"user_id": 10,
"name": "Effie Harvey"
},
{
"user_id": 11,
"name": "Burt Thompson"
},
{
"user_id": 12,
"name": "Osborn Weiss"
},
{
"user_id": 13,
"name": "Fry Cleveland"
},
{
"user_id": 14,
"name": "Carmella Cherry"
}
]
},
{
"user_id": 13,
"name": "Cantu Griffin",
"children": [
{
"user_id": 0,
"name": "Gilmore Jordan"
},
{
"user_id": 1,
"name": "Mindy Mercado"
},
{
"user_id": 2,
"name": "Townsend Harmon"
},
{
"user_id": 3,
"name": "Bethany Mathis"
},
{
"user_id": 4,
"name": "Tonia Patel"
},
{
"user_id": 5,
"name": "Earnestine Foster"
},
{
"user_id": 6,
"name": "Wilson Evans"
},
{
"user_id": 7,
"name": "Olsen Wheeler"
},
{
"user_id": 8,
"name": "Mejia Hall"
},
{
"user_id": 9,
"name": "Viola Waller"
},
{
"user_id": 10,
"name": "Robbins Rivera"
},
{
"user_id": 11,
"name": "Lowe Yang"
},
{
"user_id": 12,
"name": "Riddle Cervantes"
},
{
"user_id": 13,
"name": "Rachel Soto"
},
{
"user_id": 14,
"name": "Gonzales Bond"
}
]
},
{
"user_id": 14,
"name": "Bean Ferguson",
"children": [
{
"user_id": 0,
"name": "Hahn Wall"
},
{
"user_id": 1,
"name": "Kellie Pierce"
},
{
"user_id": 2,
"name": "Mccormick Hull"
},
{
"user_id": 3,
"name": "Peggy Spears"
},
{
"user_id": 4,
"name": "Charlotte Rocha"
},
{
"user_id": 5,
"name": "Brittney Coffey"
},
{
"user_id": 6,
"name": "Kayla Blackburn"
},
{
"user_id": 7,
"name": "Gilbert Albert"
},
{
"user_id": 8,
"name": "Patrice Ramos"
},
{
"user_id": 9,
"name": "Anna Carpenter"
},
{
"user_id": 10,
"name": "Ross Wolfe"
},
{
"user_id": 11,
"name": "Parrish Guy"
},
{
"user_id": 12,
"name": "Adams Francis"
},
{
"user_id": 13,
"name": "Myrna Ayala"
},
{
"user_id": 14,
"name": "Kimberly Harper"
}
]
}
]
},
{
"user_id": 1,
"name": "Cannon Odonnell",
"children": [
{
"user_id": 0,
"name": "Sophia Owens",
"children": [
{
"user_id": 0,
"name": "Briggs Johns"
},
{
"user_id": 1,
"name": "Jacklyn Palmer"
},
{
"user_id": 2,
"name": "Leticia Daugherty"
},
{
"user_id": 3,
"name": "Toni Steele"
},
{
"user_id": 4,
"name": "Riggs Bernard"
},
{
"user_id": 5,
"name": "Galloway Rowe"
},
{
"user_id": 6,
"name": "Bentley Lee"
},
{
"user_id": 7,
"name": "Dillon Campbell"
},
{
"user_id": 8,
"name": "Horne Franco"
},
{
"user_id": 9,
"name": "Hewitt York"
},
{
"user_id": 10,
"name": "George Kent"
},
{
"user_id": 11,
"name": "Beasley Curtis"
},
{
"user_id": 12,
"name": "Diana Rosario"
},
{
"user_id": 13,
"name": "Loraine Andrews"
},
{
"user_id": 14,
"name": "Beverly Middleton"
}
]
},
{
"user_id": 1,
"name": "Bell Mullins",
"children": [
{
"user_id": 0,
"name": "Holloway England"
},
{
"user_id": 1,
"name": "Tracy Perry"
},
{
"user_id": 2,
"name": "Frost Branch"
},
{
"user_id": 3,
"name": "Dona Sampson"
},
{
"user_id": 4,
"name": "Sykes Bishop"
},
{
"user_id": 5,
"name": "Shawn Rivers"
},
{
"user_id": 6,
"name": "Enid Glenn"
},
{
"user_id": 7,
"name": "Angelita Torres"
},
{
"user_id": 8,
"name": "Frederick Sexton"
},
{
"user_id": 9,
"name": "Christensen Maxwell"
},
{
"user_id": 10,
"name": "Lynda Dickson"
},
{
"user_id": 11,
"name": "Delaney Melton"
},
{
"user_id": 12,
"name": "Kristin Nixon"
},
{
"user_id": 13,
"name": "Krista Rose"
},
{
"user_id": 14,
"name": "Sharon Frederick"
}
]
},
{
"user_id": 2,
"name": "Tina Burt",
"children": [
{
"user_id": 0,
"name": "Valerie Sherman"
},
{
"user_id": 1,
"name": "Lawrence Coleman"
},
{
"user_id": 2,
"name": "Laura Larsen"
},
{
"user_id": 3,
"name": "Marta Beck"
},
{
"user_id": 4,
"name": "Trevino Shelton"
},
{
"user_id": 5,
"name": "Bullock Cooke"
},
{
"user_id": 6,
"name": "Avery Russell"
},
{
"user_id": 7,
"name": "Ayers Mckee"
},
{
"user_id": 8,
"name": "Cleveland Lindsay"
},
{
"user_id": 9,
"name": "Howard Perkins"
},
{
"user_id": 10,
"name": "Obrien Guerra"
},
{
"user_id": 11,
"name": "Deena Valdez"
},
{
"user_id": 12,
"name": "Cheri Reese"
},
{
"user_id": 13,
"name": "Faith Medina"
},
{
"user_id": 14,
"name": "William Woodward"
}
]
},
{
"user_id": 3,
"name": "Staci Wilkinson",
"children": [
{
"user_id": 0,
"name": "Guerra Salinas"
},
{
"user_id": 1,
"name": "Dominique Keith"
},
{
"user_id": 2,
"name": "Sylvia Mcdonald"
},
{
"user_id": 3,
"name": "Burns Randall"
},
{
"user_id": 4,
"name": "Luella Douglas"
},
{
"user_id": 5,
"name": "Roberts Aguilar"
},
{
"user_id": 6,
"name": "Watson Foreman"
},
{
"user_id": 7,
"name": "Leona Sparks"
},
{
"user_id": 8,
"name": "Hutchinson Vinson"
},
{
"user_id": 9,
"name": "Watts Adkins"
},
{
"user_id": 10,
"name": "Dean Stuart"
},
{
"user_id": 11,
"name": "Mccall Pollard"
},
{
"user_id": 12,
"name": "Jennifer Lucas"
},
{
"user_id": 13,
"name": "Autumn Santiago"
},
{
"user_id": 14,
"name": "Jody Britt"
}
]
},
{
"user_id": 4,
"name": "Robles Stokes",
"children": [
{
"user_id": 0,
"name": "James Romero"
},
{
"user_id": 1,
"name": "Pam Joseph"
},
{
"user_id": 2,
"name": "Meredith Berger"
},
{
"user_id": 3,
"name": "Cortez Wagner"
},
{
"user_id": 4,
"name": "Kasey Mccarty"
},
{
"user_id": 5,
"name": "Desiree Sweet"
},
{
"user_id": 6,
"name": "Kennedy Hunter"
},
{
"user_id": 7,
"name": "Elvia Moran"
},
{
"user_id": 8,
"name": "Isabel Hunt"
},
{
"user_id": 9,
"name": "Ernestine Horn"
},
{
"user_id": 10,
"name": "Calhoun Hardy"
},
{
"user_id": 11,
"name": "Kirsten Cameron"
},
{
"user_id": 12,
"name": "Case Gilbert"
},
{
"user_id": 13,
"name": "Frances Horne"
},
{
"user_id": 14,
"name": "Stein Lester"
}
]
},
{
"user_id": 5,
"name": "Barron Craft",
"children": [
{
"user_id": 0,
"name": "Kathleen Briggs"
},
{
"user_id": 1,
"name": "Rosales Bonner"
},
{
"user_id": 2,
"name": "Tucker Holt"
},
{
"user_id": 3,
"name": "Madeleine Mcmahon"
},
{
"user_id": 4,
"name": "Hodges Stephenson"
},
{
"user_id": 5,
"name": "Lynette Oconnor"
},
{
"user_id": 6,
"name": "Joni Snow"
},
{
"user_id": 7,
"name": "Ferguson Rosales"
},
{
"user_id": 8,
"name": "Felecia Heath"
},
{
"user_id": 9,
"name": "Curtis Morse"
},
{
"user_id": 10,
"name": "Hunter Hardin"
},
{
"user_id": 11,
"name": "Stephanie Rhodes"
},
{
"user_id": 12,
"name": "Kline Duke"
},
{
"user_id": 13,
"name": "Hood Mcintosh"
},
{
"user_id": 14,
"name": "Addie Lane"
}
]
},
{
"user_id": 6,
"name": "Hays Murphy",
"children": [
{
"user_id": 0,
"name": "Kerr Avila"
},
{
"user_id": 1,
"name": "Natasha Marquez"
},
{
"user_id": 2,
"name": "Brennan Hicks"
},
{
"user_id": 3,
"name": "Isabelle Roy"
},
{
"user_id": 4,
"name": "Marisa Harris"
},
{
"user_id": 5,
"name": "Levy Schultz"
},
{
"user_id": 6,
"name": "Bolton Brown"
},
{
"user_id": 7,
"name": "Mcmillan Henry"
},
{
"user_id": 8,
"name": "Richard Lancaster"
},
{
"user_id": 9,
"name": "Jacquelyn Huffman"
},
{
"user_id": 10,
"name": "Yesenia Abbott"
},
{
"user_id": 11,
"name": "Rosa Booker"
},
{
"user_id": 12,
"name": "Chaney Horton"
},
{
"user_id": 13,
"name": "Harmon Mcmillan"
},
{
"user_id": 14,
"name": "Merritt Pittman"
}
]
},
{
"user_id": 7,
"name": "Mclean Wilkerson",
"children": [
{
"user_id": 0,
"name": "Monroe Moreno"
},
{
"user_id": 1,
"name": "Carrie Shaffer"
},
{
"user_id": 2,
"name": "Rosario Lewis"
},
{
"user_id": 3,
"name": "Phyllis Mclean"
},
{
"user_id": 4,
"name": "Donaldson Wood"
},
{
"user_id": 5,
"name": "Laverne Ward"
},
{
"user_id": 6,
"name": "Amber Dejesus"
},
{
"user_id": 7,
"name": "Whitfield Guthrie"
},
{
"user_id": 8,
"name": "Vazquez Sloan"
},
{
"user_id": 9,
"name": "Barnett Crosby"
},
{
"user_id": 10,
"name": "Blackburn Green"
},
{
"user_id": 11,
"name": "Claire Hurst"
},
{
"user_id": 12,
"name": "Shana Sweeney"
},
{
"user_id": 13,
"name": "Powers Workman"
},
{
"user_id": 14,
"name": "Morrison Bradley"
}
]
},
{
"user_id": 8,
"name": "Hancock Ingram",
"children": [
{
"user_id": 0,
"name": "Rosella Kaufman"
},
{
"user_id": 1,
"name": "Gilliam Ochoa"
},
{
"user_id": 2,
"name": "Chris Chaney"
},
{
"user_id": 3,
"name": "Keller Mann"
},
{
"user_id": 4,
"name": "Reilly Herring"
},
{
"user_id": 5,
"name": "Sally Sellers"
},
{
"user_id": 6,
"name": "Cathy Barnett"
},
{
"user_id": 7,
"name": "Roberta Huff"
},
{
"user_id": 8,
"name": "Stone Olsen"
},
{
"user_id": 9,
"name": "Victoria Owen"
},
{
"user_id": 10,
"name": "Wolf Bryan"
},
{
"user_id": 11,
"name": "Ruthie Atkinson"
},
{
"user_id": 12,
"name": "Mona Hoover"
},
{
"user_id": 13,
"name": "Sonja Carter"
},
{
"user_id": 14,
"name": "Evangelina Alvarez"
}
]
},
{
"user_id": 9,
"name": "Blevins Miranda",
"children": [
{
"user_id": 0,
"name": "Terry Garcia"
},
{
"user_id": 1,
"name": "Lynch Berg"
},
{
"user_id": 2,
"name": "Nichole Castro"
},
{
"user_id": 3,
"name": "Eugenia Sims"
},
{
"user_id": 4,
"name": "Graham Gilmore"
},
{
"user_id": 5,
"name": "Meagan Burton"
},
{
"user_id": 6,
"name": "Marks Camacho"
},
{
"user_id": 7,
"name": "Carissa Calhoun"
},
{
"user_id": 8,
"name": "Wyatt Gallegos"
},
{
"user_id": 9,
"name": "Richmond Henson"
},
{
"user_id": 10,
"name": "Lupe Craig"
},
{
"user_id": 11,
"name": "Atkins Sosa"
},
{
"user_id": 12,
"name": "Ora Bennett"
},
{
"user_id": 13,
"name": "Rosie Elliott"
},
{
"user_id": 14,
"name": "Bowman Grant"
}
]
},
{
"user_id": 10,
"name": "Ray Hammond",
"children": [
{
"user_id": 0,
"name": "Cecilia Mcconnell"
},
{
"user_id": 1,
"name": "Cheryl Downs"
},
{
"user_id": 2,
"name": "Tameka Bowers"
},
{
"user_id": 3,
"name": "Leila Everett"
},
{
"user_id": 4,
"name": "Hardy Cannon"
},
{
"user_id": 5,
"name": "Lauri Lynn"
},
{
"user_id": 6,
"name": "Opal Burnett"
},
{
"user_id": 7,
"name": "Lamb Richard"
},
{
"user_id": 8,
"name": "Sheena Casey"
},
{
"user_id": 9,
"name": "Tamara Trujillo"
},
{
"user_id": 10,
"name": "Deborah Barrera"
},
{
"user_id": 11,
"name": "Kristine Madden"
},
{
"user_id": 12,
"name": "Gamble Chase"
},
{
"user_id": 13,
"name": "Foster Hess"
},
{
"user_id": 14,
"name": "Christina Moses"
}
]
},
{
"user_id": 11,
"name": "Leah Reed",
"children": [
{
"user_id": 0,
"name": "Dollie Fernandez"
},
{
"user_id": 1,
"name": "Noble Ellison"
},
{
"user_id": 2,
"name": "Holland Merrill"
},
{
"user_id": 3,
"name": "Crawford Levy"
},
{
"user_id": 4,
"name": "Britney Parsons"
},
{
"user_id": 5,
"name": "Deloris Hughes"
},
{
"user_id": 6,
"name": "Julia Bowman"
},
{
"user_id": 7,
"name": "Kinney Wynn"
},
{
"user_id": 8,
"name": "Tara Rojas"
},
{
"user_id": 9,
"name": "Erika Dalton"
},
{
"user_id": 10,
"name": "Patricia Delacruz"
},
{
"user_id": 11,
"name": "Ann Foley"
},
{
"user_id": 12,
"name": "Anderson Underwood"
},
{
"user_id": 13,
"name": "David Mitchell"
},
{
"user_id": 14,
"name": "Cleo Head"
}
]
},
{
"user_id": 12,
"name": "Hartman Conner",
"children": [
{
"user_id": 0,
"name": "Stanton Mosley"
},
{
"user_id": 1,
"name": "Ball Frye"
},
{
"user_id": 2,
"name": "Alyce Ortega"
},
{
"user_id": 3,
"name": "Helene Austin"
},
{
"user_id": 4,
"name": "Minerva Lang"
},
{
"user_id": 5,
"name": "Vaughn Hubbard"
},
{
"user_id": 6,
"name": "Ramsey Caldwell"
},
{
"user_id": 7,
"name": "Adela Gibbs"
},
{
"user_id": 8,
"name": "Tania Carlson"
},
{
"user_id": 9,
"name": "Casey Wilder"
},
{
"user_id": 10,
"name": "Evangeline Alford"
},
{
"user_id": 11,
"name": "Rhea Decker"
},
{
"user_id": 12,
"name": "Catherine Kirby"
},
{
"user_id": 13,
"name": "Marjorie Osborn"
},
{
"user_id": 14,
"name": "Bonita Powell"
}
]
},
{
"user_id": 13,
"name": "Underwood Blair",
"children": [
{
"user_id": 0,
"name": "Jewel Wright"
},
{
"user_id": 1,
"name": "Milagros Kramer"
},
{
"user_id": 2,
"name": "Brady Roberson"
},
{
"user_id": 3,
"name": "Glenda Velasquez"
},
{
"user_id": 4,
"name": "Benjamin Roberts"
},
{
"user_id": 5,
"name": "Sawyer Rodriguez"
},
{
"user_id": 6,
"name": "Lessie Carroll"
},
{
"user_id": 7,
"name": "Tammi Mckay"
},
{
"user_id": 8,
"name": "Wade Emerson"
},
{
"user_id": 9,
"name": "Catalina Aguirre"
},
{
"user_id": 10,
"name": "Kathrine Flynn"
},
{
"user_id": 11,
"name": "Audra Randolph"
},
{
"user_id": 12,
"name": "Fox Holloway"
},
{
"user_id": 13,
"name": "Esperanza Kerr"
},
{
"user_id": 14,
"name": "Wilcox Dorsey"
}
]
},
{
"user_id": 14,
"name": "Brandi Knight",
"children": [
{
"user_id": 0,
"name": "Gutierrez Meadows"
},
{
"user_id": 1,
"name": "Bette Day"
},
{
"user_id": 2,
"name": "Virgie Herrera"
},
{
"user_id": 3,
"name": "Lucile Orr"
},
{
"user_id": 4,
"name": "Sheila Hill"
},
{
"user_id": 5,
"name": "Carey Estrada"
},
{
"user_id": 6,
"name": "Garcia Long"
},
{
"user_id": 7,
"name": "Anne Logan"
},
{
"user_id": 8,
"name": "Bridget Fry"
},
{
"user_id": 9,
"name": "Padilla Nguyen"
},
{
"user_id": 10,
"name": "Little Black"
},
{
"user_id": 11,
"name": "Naomi Mooney"
},
{
"user_id": 12,
"name": "Mercer Ferrell"
},
{
"user_id": 13,
"name": "Tabitha Gardner"
},
{
"user_id": 14,
"name": "Merle Daniels"
}
]
}
]
},
{
"user_id": 2,
"name": "Regina Nieves",
"children": [
{
"user_id": 0,
"name": "Maricela Carey",
"children": [
{
"user_id": 0,
"name": "Eula Terrell"
},
{
"user_id": 1,
"name": "Aileen Flores"
},
{
"user_id": 2,
"name": "Mcdowell Bolton"
},
{
"user_id": 3,
"name": "Shelia Boone"
},
{
"user_id": 4,
"name": "Lancaster Waters"
},
{
"user_id": 5,
"name": "Sharpe Sandoval"
},
{
"user_id": 6,
"name": "Cotton Good"
},
{
"user_id": 7,
"name": "Mayra Kidd"
},
{
"user_id": 8,
"name": "Brooks Powers"
},
{
"user_id": 9,
"name": "Shields Sutton"
},
{
"user_id": 10,
"name": "Juanita Potts"
},
{
"user_id": 11,
"name": "Faulkner Burgess"
},
{
"user_id": 12,
"name": "Leann Walter"
},
{
"user_id": 13,
"name": "Greer Smith"
},
{
"user_id": 14,
"name": "Kristie Suarez"
}
]
},
{
"user_id": 1,
"name": "Karina Simpson",
"children": [
{
"user_id": 0,
"name": "Hicks Herman"
},
{
"user_id": 1,
"name": "Ester Stanley"
},
{
"user_id": 2,
"name": "Sosa Riddle"
},
{
"user_id": 3,
"name": "Sheppard Baker"
},
{
"user_id": 4,
"name": "Molina Hays"
},
{
"user_id": 5,
"name": "Harris Rice"
},
{
"user_id": 6,
"name": "Tanner Hopkins"
},
{
"user_id": 7,
"name": "Hendrix Gutierrez"
},
{
"user_id": 8,
"name": "Sweet Chambers"
},
{
"user_id": 9,
"name": "Carole Ruiz"
},
{
"user_id": 10,
"name": "Juliet Cain"
},
{
"user_id": 11,
"name": "Carolina James"
},
{
"user_id": 12,
"name": "Pauline Williamson"
},
{
"user_id": 13,
"name": "Jenna Pennington"
},
{
"user_id": 14,
"name": "Bernadine Hobbs"
}
]
},
{
"user_id": 2,
"name": "Eaton Campos",
"children": [
{
"user_id": 0,
"name": "Conley Flowers"
},
{
"user_id": 1,
"name": "Clemons Mcneil"
},
{
"user_id": 2,
"name": "Dickerson Ayers"
},
{
"user_id": 3,
"name": "Gloria Barber"
},
{
"user_id": 4,
"name": "Lidia Duncan"
},
{
"user_id": 5,
"name": "Carrillo Pace"
},
{
"user_id": 6,
"name": "Solis Gray"
},
{
"user_id": 7,
"name": "Mcintosh Puckett"
},
{
"user_id": 8,
"name": "Campbell Fitzgerald"
},
{
"user_id": 9,
"name": "Clare Mccoy"
},
{
"user_id": 10,
"name": "Emma Talley"
},
{
"user_id": 11,
"name": "Sanders Becker"
},
{
"user_id": 12,
"name": "Joy Walker"
},
{
"user_id": 13,
"name": "Latisha Marshall"
},
{
"user_id": 14,
"name": "Murray Dillon"
}
]
},
{
"user_id": 3,
"name": "Garrett Webster",
"children": [
{
"user_id": 0,
"name": "Mae Lowery"
},
{
"user_id": 1,
"name": "Hilda Townsend"
},
{
"user_id": 2,
"name": "Armstrong Vasquez"
},
{
"user_id": 3,
"name": "Olive Anthony"
},
{
"user_id": 4,
"name": "Miranda Nolan"
},
{
"user_id": 5,
"name": "Long Fischer"
},
{
"user_id": 6,
"name": "Luna Stanton"
},
{
"user_id": 7,
"name": "Green Watson"
},
{
"user_id": 8,
"name": "Nicholson Pitts"
},
{
"user_id": 9,
"name": "Gabrielle Mcdaniel"
},
{
"user_id": 10,
"name": "Pace Clayton"
},
{
"user_id": 11,
"name": "Grant Eaton"
},
{
"user_id": 12,
"name": "Conway House"
},
{
"user_id": 13,
"name": "Lambert Trevino"
},
{
"user_id": 14,
"name": "Lea Barker"
}
]
},
{
"user_id": 4,
"name": "Diane Pruitt",
"children": [
{
"user_id": 0,
"name": "Oneill Fox"
},
{
"user_id": 1,
"name": "Becky Jarvis"
},
{
"user_id": 2,
"name": "Ronda Clarke"
},
{
"user_id": 3,
"name": "Augusta Chan"
},
{
"user_id": 4,
"name": "Ana Zamora"
},
{
"user_id": 5,
"name": "Fleming Lott"
},
{
"user_id": 6,
"name": "Brigitte Padilla"
},
{
"user_id": 7,
"name": "Booth Boyd"
},
{
"user_id": 8,
"name": "Saundra Barton"
},
{
"user_id": 9,
"name": "Fields Cote"
},
{
"user_id": 10,
"name": "Holder Savage"
},
{
"user_id": 11,
"name": "Melva Delgado"
},
{
"user_id": 12,
"name": "Wooten Maynard"
},
{
"user_id": 13,
"name": "Ivy Thornton"
},
{
"user_id": 14,
"name": "Stuart Alston"
}
]
},
{
"user_id": 5,
"name": "Pearson Park",
"children": [
{
"user_id": 0,
"name": "Nora Mcbride"
},
{
"user_id": 1,
"name": "Crane Willis"
},
{
"user_id": 2,
"name": "Edna Donovan"
},
{
"user_id": 3,
"name": "Ward Strickland"
},
{
"user_id": 4,
"name": "Julianne Castaneda"
},
{
"user_id": 5,
"name": "Buckley Wilson"
},
{
"user_id": 6,
"name": "Taylor Kennedy"
},
{
"user_id": 7,
"name": "Blanchard Cantrell"
},
{
"user_id": 8,
"name": "Davis Morin"
},
{
"user_id": 9,
"name": "Sondra Espinoza"
},
{
"user_id": 10,
"name": "Hattie Riley"
},
{
"user_id": 11,
"name": "Douglas Oneill"
},
{
"user_id": 12,
"name": "Jane Hester"
},
{
"user_id": 13,
"name": "Witt Pratt"
},
{
"user_id": 14,
"name": "Valeria Page"
}
]
},
{
"user_id": 6,
"name": "Wallace Jimenez",
"children": [
{
"user_id": 0,
"name": "Warren Johnson"
},
{
"user_id": 1,
"name": "Hampton Tate"
},
{
"user_id": 2,
"name": "Jean Mcleod"
},
{
"user_id": 3,
"name": "Georgia Blackwell"
},
{
"user_id": 4,
"name": "Nellie Conley"
},
{
"user_id": 5,
"name": "Graves Morris"
},
{
"user_id": 6,
"name": "May Hartman"
},
{
"user_id": 7,
"name": "Hale Lopez"
},
{
"user_id": 8,
"name": "Debra Mayer"
},
{
"user_id": 9,
"name": "Noelle Rush"
},
{
"user_id": 10,
"name": "Bailey Pugh"
},
{
"user_id": 11,
"name": "Gray Potter"
},
{
"user_id": 12,
"name": "Eloise Joyner"
},
{
"user_id": 13,
"name": "Selma Walton"
},
{
"user_id": 14,
"name": "Sheryl Moon"
}
]
},
{
"user_id": 7,
"name": "Yates Mullen",
"children": [
{
"user_id": 0,
"name": "Kerry Diaz"
},
{
"user_id": 1,
"name": "Byers Mckinney"
},
{
"user_id": 2,
"name": "Potts Rodriquez"
},
{
"user_id": 3,
"name": "Cecelia Gill"
},
{
"user_id": 4,
"name": "Lynn Mcclain"
},
{
"user_id": 5,
"name": "Abbott Chavez"
},
{
"user_id": 6,
"name": "Oneal Odom"
},