2012-02-28 97 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