我認爲這會很容易,但它變得非常頭疼。我有一個多維的JSON對象從我的web服務器返回。我解析它來構建一個相當深的導航窗格。我需要能夠搜索這個對象,但我爲了這個手段而空白。在多維json對象中搜索
該目的是構造爲這樣:樹形>行[] =>樹形>行[] =>樹...
每個樹可以有很多行,並且每一行可以有一個樹等
在行級別有一些變量,我需要搜索並找到一個值。 EX:if(tree.rows[x].tree.rows[y].url =="http://stackoverflow.com" return true;
我的困難是,我不知道如何遍歷整個對象。即使我遞歸執行,我也不知道如何繼續往上和往下行。
這裏是對象的示例:
var jsonLNav = {itemClassName:"NodeLink",linkClassName:"NodeLinkTitle",linkHideClassName:"HideFromProd",navCategoryClassName:"NavCategory",onLoadJS:"",tree:[{pos:1,wid:"263a97c2-7cb9-470c-bf86-cadc28ae1323",pid:"1",rows:[{hide:0,title:"More IT Help",isNC:0,isMig:0,url:"http://vm-hsspdv-d09p/en-us/Help/Pages/ITHelp.aspx",isOL:0,tree:{pos:2,wid:"263a97c2-7cb9-470c-bf86-cadc28ae1323",pid:"3"}},{hide:0,title:"Office 2010",isNC:0,isMig:1,url:"http://office2010.lmig.com/Pages/Default.aspx",isOL:0,tree:{pos:2,wid:"263a97c2-7cb9-470c-bf86-cadc28ae1323",pid:"9"}},{hide:0,title:"E-mail Management",isNC:0,isMig:0,url:"http://vm-hsspdv-d09p/en-us/Help/EmailManagement/Pages/default.aspx",isOL:0,tree:{pos:2,wid:"8be66348-8da1-4e5c-90c5-0930d2f52d1a",pid:"123"}},]}]};
這個例子一塊沒有該行的任何兒童樹木,但這對象是成千上萬個字符長,我可以張貼如果必要的。
我能想到的最好的代碼會接近這個(沒有測試過,在概念上,我失去了一些東西):
function findURL(url)
{
alert(searchJson(jsonLNav.tree[0],url));
}//end findURL
function searchJson(tree,url)
{
for(var x=0; x<=tree.rows.length-1;x++)
{
if(url == tree.rows[x].url)
{
return tree.rows[x].title;
}//end if
else
{
searchJson(tree.rows[x].tree,url)
}//end else
}//end for
}//end searchJson
謝謝!
很快,謝謝。我正在嘗試一下,我在for循環中遇到了一個問題。我的錯誤是:「tree.rows是未定義的」。我認爲它是在列表末尾調用遞歸方法,並且沒有行。我在其他類型的檢查中折騰。 – kevingreen 2011-03-23 21:57:02
@kevingreen也許你應該最初使用「jsonLNav.tree」而不是jsonLNav.tree [0]「調用函數... – Pointy 2011-03-23 21:59:18
由於我不完全確定的原因,json對象被創建時引用了父樹數字爲[0],其他所有樹都沒有,不幸的是我正在處理寫在系統外部的代碼,所以目前我無法深入瞭解它的原因。typeof似乎在我的測試中工作情況。 – kevingreen 2011-03-23 22:03:07