2012-02-16 69 views
1

我的PHP側生成服務器上一個JSON對象,加上迭代它在客戶端

$i = 1; 
    while ($row = mysql_fetch_array($query)) { 
     $productarray[$i][] = $row['product_id']; 
     $productarray[$i][] = $row['product_model']; 
     $productarray[$i][] = $row['product_type']; 
     $productarray[$i][] = $row['product_return']; 
     $i++; 
    } 
    $jsonstring = json_encode($productarray); 

這就是即時得到這是一個有效的JSON字符串

{ 
"1":["1","HFJ5G1.5","plat","graviteits"], 
"2":["2","HHJ5S2.5","holle plunjer","veer"], 
"3":["3","HTJ5S7.5","inbouw","veer"] 
} 

我無法通過這個有人迭代請告訴我如何迭代此json

從json站點我認爲這是格式,如果是的話我怎麼能改變上述json字符串到這種格式?

{ 
"1":[{"1","HFJ5G1.5","plat","graviteits"}], 
"2":[{"2","HHJ5S2.5","holle plunjer","veer"}], 
"3":[{"3","HTJ5S7.5","inbouw","veer"}] 
} 

回答

1

您需要重構你的PHP代碼一點點位。嘗試做這樣的事情:

$productarray = array(); 
while ($product = mysql_fetch_assoc($query)) { // NOTE: using associative array 
    $productarray[] = $product; 
} 
echo json_encode($productarray); 

// Output 
// [{ 
//  "product_id": "1", 
//  "product_model": "HFJ5G1.5", 
//  "product_type": "plat", 
//  "product_rturn": "graviteits" 
// }, { 
//  "product_id": "2", 
//  "product_model": "HHJ5S2.5", 
//  "product_type": "holle plunjer", 
//  "product_rturn": "veer" 
// }, { 
//  "product_id": "3", 
//  "product_model": "HTJ5S7.5", 
//  "product_type": "inbouw", 
//  "product_rturn": "veer" 
// }] 

請注意,它現在變得非常容易迭代。你可以這樣做如下:

var o = [{ 
    "product_id": "1", 
    "product_model": "HFJ5G1.5", 
    "product_type": "plat", 
    "product_rturn": "graviteits" 
}, { 
    "product_id": "2", 
    "product_model": "HHJ5S2.5", 
    "product_type": "holle plunjer", 
    "product_rturn": "veer" 
}, { 
    "product_id": "3", 
    "product_model": "HTJ5S7.5", 
    "product_type": "inbouw", 
    "product_rturn": "veer" 
}]; 
for (var i = 0; i < o.length; i++) { 
    console.log("Product " + (i + 1) + " has model:" + o[i]["product_model"]); 
    console.log("Product " + (i + 1) + " has type:" + o[i]["product_type"]); 
} 
+0

var j = 1; (var i in o){ alert(o [i] [j]);/*它需要提醒每一個值的權利*/ j ++ } – coolguy 2012-02-16 08:46:51

+0

但即時通訊獲取警報[,O,B,J,E,C,T,O,B,J ......等奇怪:( – coolguy 2012-02-16 08:48:02

+1

我修改了我的答案。 – 2012-02-16 09:03:53

0

第一個字符串是有效的JSON,第二個是不。您可以在線查看(請參閱Google,有JSON語法檢查網站)或者在帶有window.JSON.parse()的瀏覽器控制檯中進行檢查(任何現代瀏覽器,舊版瀏覽器均不具有window.JSON)。由於這是一個對象,你可以用

for (var i in o) { 
    //do something with o[i] 
} 

迭代或者你可以只改變{}爲[]並拔出鑰匙串「‘’:」和有一個數組:

//Input JSON string: 
//[ 
// ["1","HFJ5G1.5","plat","graviteits"], 
// ["2","HHJ5S2.5","holle plunjer","veer"], 
// ["3","HTJ5S7.5","inbouw","veer"] 
//] 
JSON.parse('[["1","HFJ5G1.5","plat","graviteits"],["2","HHJ5S2.5","holle plunjer","veer"],["3","HTJ5S7.5","inbouw","veer"]]') 
//(to test it - works.) 
+0

那些能夠降低某些東西的人(如此處爲-1)請解釋一下爲什麼?我看不出我的解釋有什麼不妥(還有,這些例子解析!)。或者是我加了一個評論「奇怪的問題」的人,作爲報復? (Q現在已經消失)。如果是這樣:你有一些嚴重的問題。 – 2012-02-16 11:09:59

0
{ 
"1":[{"1","HFJ5G1.5","plat","graviteits"}], 
"2":[{"2","HHJ5S2.5","holle plunjer","veer"}], 
"3":[{"3","HTJ5S7.5","inbouw","veer"}] 
} 

不是正確的對象。當你有一個'{}'時,你需要有一組'name:value'由昏迷分隔。

所以,你可能有:

{ 
"1":["1","HFJ5G1.5","plat","graviteits"], 
"2":["2","HHJ5S2.5","holle plunjer","veer"], 
"3":["3","HTJ5S7.5","inbouw","veer"] 
} 

{ 
"1":[{nameField1:"1",nameField2:"HFJ5G1.5",nameField3:"plat",nameField4:"graviteits"}], // one object in the array 
... 
} 
1

做到這一點:

$i = 0; 
while ($row = mysql_fetch_array($query)) { 
    $productarray[$i]['id'] = $row['product_id']; 
    $productarray[$i]['model'] = $row['product_model']; 
    $productarray[$i]['type'] = $row['product_type']; 
    $productarray[$i]['ret'] = $row['product_return']; 
$i++; 
} 

$jsonstring = json_encode($productarray); 

的JSON看起來就像這樣:

[ 
{id:"1",model:"HFJ5G1.5",type:"plat",ret:"graviteits"}, 
{id:"2",model:"HHJ5S2.5",type:"holle plunjer",ret:"veer"}, 
{id:"3",model:"HTJ5S7.5",type:"inbouw",ret:"veer"} 
] 
現在

在JS可以循環,如:

for(i=0,i<jsonString.length;i++;){ 
    id = jsonString[i].id; 
    model = jsonString[i].model; 
    type = jsonString[i].type; 
    ret = jsonString[i].ret; 
} 
相關問題