【发布时间】:2011-03-23 21:46:05
【问题描述】:
我以为这会很容易,但它变得相当令人头疼。我有一个从我的网络服务器返回的多维 JSON 对象。我正在解析它以构建一个相当深的导航窗格。我需要能够搜索这个对象,但我对方法一无所知。
对象的结构如下:tree->rows[]=>tree->rows[]=>tree ...
每棵树可以有很多行,每行可以有棵树等等。
在行级别有几个变量,我需要搜索并找到一个的值。
例如: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
谢谢!
【问题讨论】:
标签: javascript json web