2012-02-28 99 views
1

我需要超过在PHP与后续的结构产生的JSON对象JS(没有框架)进行迭代:遍历特定JSON

{ 
     EDITED: I DID HAVE AN ERROR, SORRY 
    } 

我搜索没有任何JS框架中的溶液。 ¿如何获得,例如,

lvl1a.lvl2a.a 
lvl1a.lvl2a.b 
lvl1a.lvl2b.a 
lvl1a.lvl2b.b 
... 

感谢


的更多信息:

我也有出错。如果上一个代码! SORRY

功能:填充两个选择, “选择1” 和 “选择2”,与选项=类别OPTGROUP = CategoryParent

$toJson=array(); 
$selectname=array("select1","select2"); 
for($i=0;$i<2;$i++){ 
    $sql="SELECT idCategory as v,name as l,(select name from categories where idCategory=C.idCategoryParent) as p FROM categories C WHERE idBanner".($i+1)." is NULL order by idCategoryParent, `order`"; 
    $result =$ocdb->query($sql); 
    $nameIdx = ""; 
    while ($row=mysql_fetch_assoc($result)){ 
     $first=mysql_field_name($result, 0); 
     $second=mysql_field_name($result,1); 
     $third= mysql_field_name($result,2);    

     if($nameIdx!=$row[$third]) 
       $nameIdx=$row[$third]; 
     } 
      if($row[$third]!=NULL){ 
       array_pop($row); 
       $toJson[$selectname[$i]][$nameIdx][]=$row; 
      } 

    } 

} 
$inJson=json_encode($toJson); 

,所以我得到这样的:

{ 
     "select1": { "optgroup1":[{"v":"1","l":"option1"},{"v":"2","l":"option2"}], 
         "optgroup2":[{"v":"3","l":"option1"},{"v":"4","l":"option2"}], 
         "optgroup3":[{"v":"5","l":"option1"},{"v":"6","l":"option2"}] 
        }, 
     "select2": { " (...) 
    } 

// OPTGROUP是parentCategory //选项类别没有父母

+1

你必须提供更多的信息。你如何访问来自JavaScript的数据?即你通过Ajax检索,还是你的PHP脚本实际上生成JavaScript并将数据插入到它中?一般来说,你不能真正遍历任何JSON数据,因为它只是一个文本表示。你可以*把它转换成一个JavaScript对象,然后只要你认为合适的话就可以访问它的属性。 – 2012-02-28 14:04:50

回答

1

使用的东西递归:

function iterateObject(obj){ 
    var result = []; 

    function recurse(obj){ 
    for (var l in obj){ 
     if(obj.hasOwnProperty(l)){ 
     result.push(l+ 
        (!(obj[l] instanceof Object) 
        ? ': '+obj[l] 
        : ' -> object >')); 
     if (obj[l] instanceof Object){ 
      recurse(obj[l]); 
     } 
     } 
    } 
    } 

    recurse(obj); 
    return result; 
} 

var thing = { 
    "lvl1a": { "lvl2a":[{"a":"xxxxx"},{"b":"xxxxx"}], 
       "lvl2b":[{"a":"xxxxx"},{"b":"xxxxx"}], 
       "lvl2c":[{"a":"xxxxx"},{"b":"xxxxx"}] 
       }, 
    "lvl1b": { "lvl3a":[{"c":"xxxxx"},{"d":"xxxxx"}], 
       "lvl3b":[{"c":"xxxxx"},{"d":"xxxxx"}], 
       "lvl3c":[{"c":"xxxxx"},{"d":"xxxxx"}] 
       } 
}; 
console.log(iterateObject(thing).join('\n')); 
//=> 
// lvl1a -> object > 
// lvl2a -> object > 
// 0 -> object > 
// a: xxxxx 
// 1 -> object > 
// b: xxxxx 
// ... etc 
+0

非常有用。你帮了我很多!非常感谢你 – user1238010 2012-02-28 15:33:10

1

你的意思是:

myObject.lvl1a.lvl2a[0].a 
myObject.lvl1a.lvl2a[1].b 

等等?

+0

对!我看... – user1238010 2012-02-28 14:05:50