If you can't touch the HTML, here you have an option...
var myList = [];
$('ul.nameList > li').each(function() {
myList.push({
"id": $(this).val(),
"category": $(this).clone().children('ul.subcatList').remove().end().text().trim(),
"subcategory": $(this).find('ul.subcatList li').toArray().map(function(value) { return value.innerHTML; })
});
});
... but if you can, I will put the category name in some element, to make easier to select it. You could use...
<li value="1"><span class="cattitle">Parking</span>
<ul class="subcatList">
<li>Street Parking</li>
<li>Bus Parking</li>
<li>Complementary Parking</li>
</ul>
</li>
<li value="2"><span class="cattitle">Business Services</span>
<ul class="subcatList">
<li>Business Center</li>
<li>A/V Capabilities</li>
<li>Video Conferencing</li>
</ul>
</li>
........
... so you can simplify the jQuery...
var myList = [];
$('ul.nameList > li').each(function() {
myList.push({
"id": $(this).val(),
"category": $(this).children('span.classtitle').text(),
"subcategory": $(this).find('ul.subcatList li').toArray().map(function(value) { return value.innerHTML; })
});
});
I hope it helps