在服务器上生成JSON对象,并在客户端迭代它

时间:2012-02-16 08:28:33

标签: php javascript iterator json

我的php端

   $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"}]
}

4 个答案:

答案 0 :(得分: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"]);
}

答案 1 :(得分: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;
}

答案 2 :(得分:0)

第一个字符串是有效的JSON,第二个字符串不是。您可以在线查看(请参阅google,有JSON语法检查网站)或在浏览器控制台中使用window.JSON.parse()(任何现代浏览器,旧浏览器都没有window.JSON)。由于这是一个对象,您可以使用

进行迭代
for (var i in o) {
  //do something with o[i]
}

或者你可以只更改[] for []并删除键字符串'“”:'并有一个数组:

//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.)

答案 3 :(得分: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
 ...
}