Parse.com unable to output proper JSON

Let's say I have two Classes (tables) in Parse:

--- TABLE 1: Navigation -------------------
objectId
Name
Url
-------------------------------------------

--- TABLE 2: Items ------------------------
objectId
Navigation (pointer to Navigation class)
Name
Price
-------------------------------------------

All I want is for some JSON output like the following:

[
{
name: "Home",
url: "home"
},
{
name: "Menu",
url: "menu",
items: [{
    name: "French Fries",
    price: 3.00
    },
    {
    name: "Hamburger",
    price: 4.00
    },
    {
    name: "Cheeseburger",
    price: 5.00
    }]
},
{
name: "Dinner Menu",
url: "dinner-menu",
items: [{
    name: "Beer",
    price: 3.00
    },
    {
    name: "Wine (glass)",
    price: 9.00
    },
    {
    name: "Liquor Premium",
    price: 8.00
    }]
},
{
name: "Like and Follow Us",
url: "social-media"
}
]

I have tried everything in my power to make a query with a nest query inside that to loop the items. I have tried looking at the documentation for Parse.Promises, which I believe to be part of the problem, and cannot get the results to appear like above. Help!!!

My broken code:

var mainNav = [];
var navigationQuery = new Parse.Query(Parse.Object.extend("Navigation"));
navigationQuery.ascending("SortOrder").find().then(function(navItems) {

    _.each(navItems, function(navItem) {

        var newObj = {};
        newObj.Name = navItem.get("Name");
        newObj.Url = navItem.get("Url");
        newObj.Module = navItem.get("Module");
        newObj.SortOrder = navItem.get("SortOrder");

        var itemQuery = new Parse.Query(Parse.Object.extend("ListItems")).equalTo('Navigation', navItem).ascending('SortOrder').find(function(items) {
            newObj.Source = items; // not getting added to object!
        });
        mainNav.push(newObj);

    });


}).then(function(items) {

    res.send(mainNav);

});

The find() over itemQuery is running asynchronously, yet you're adding the results of the query to mainNav outside of the completion block, so this code is unlikely to behave the way you expect it to. You might want to use Promises in the find() block to accumulate all of the Source items before adding them to mainNav.