I'm curious why you are doing string concatenation when you could use a spry region with your dataset?
Are you doing a search and returning the results as ajax? In any case, you can use a spry region with a table and have spry itself handle creating the rows of the table. I do that with my app, though I use XML and not JSON, but it goes very fast.
Take a look at the documentation here on how to use a spry region with a dataset. The example is xml, but it should work with json.
http://labs.adobe.com/technologies/spry/articles/data_set_overview/
Here's some HTML that I copied out of the article.
<div id="Specials_DIV" spry:region="dsSpecials">
<table id="Specials_Table">
<tr>
<th>Item</th>
<th>Description</th>
<th>Price</th>
</tr>
<!--User clicks to reset the current row in the data set-->
<tr spry:repeat="dsSpecials" spry:setrow="dsSpecials">
<td>{item}</td>
<td>{description}</td>
<td>{price}</td>
</tr>
</table>
</div>
So, you don't need to concatenate your variable then insert it into the dom.
Just give spry your html, add in variables in curly braces, and let spry render it.
Here's some snippets of my site:
<div id="custs" spry:region="dsCustomers">
<table spry:state="loading"><tr><td valign="middle"><img src="icons/throbber-active.gif" height="13px" width="15px"><b>Loading items ...</b></td></tr></table>
<table spry:state="ready" spry:if="{ds_RowCount} == 0"><tr><td><b>No results! Try a different search.</b></td></tr></table>
So what I'm doing is if the table is loading, I just want to show the 'loading icon'. If there are no results, then just show that there are no results. If there are results though, you can follow the example as above.
A simpler example using the spry json dataset is here: http://labs.adobe.com/technologies/spry/samples/data_region/JSONDataSe tSample.html
They are using simple spans, but you can create a table and use the dataset to iterate over the rows. Take a look at example 7 here.
North America
Europe, Middle East and Africa
Asia Pacific