2012-02-16 70 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; 
} 
相关问题