在服务器上生成一个JSON对象,并在客户端对其进行迭代


Generating a JSON object on server plus iterating it on client-side

我的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"}]
}

您需要稍微重构一下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"]);
}

这样做:

$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;
}
{
 "1":[{"1","HFJ5G1.5","plat","graviteits"}],
 "2":[{"2","HHJ5S2.5","holle plunjer","veer"}],
 "3":[{"3","HTJ5S7.5","inbouw","veer"}]
}

不是正确的对象。当你有一个"{}"时,你需要有一组由昏迷分隔的"名称:值"。

所以你可能有:

{
 "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
 ...
} 

第一个字符串是有效的JSON,第二个不是。您可以在线查看(见谷歌,有JSON语法检查网站)或在带有窗口的浏览器控制台中查看。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.)