【问题标题】:Generating a JSON object on server plus iterating it on client-side在服务器上生成 JSON 对象并在客户端对其进行迭代
【发布时间】:2012-03-07 15:33:07
【问题描述】:

我的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 javascript iterator json


    【解决方案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"]);
    }
    

    【讨论】:

    • var j = 1; for(var i in o){ alert(o[i][j]); /*它需要提醒每个值正确*/ j++ }
    【解决方案2】:

    这样做:

    $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;
    }
    

    【讨论】:

      【解决方案3】:

      第一个字符串是有效的 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.)
      

      【讨论】:

      • 那些对某事投反对票的人(像这里的-1)可以解释一下为什么吗?我看不出我的解释有什么问题(同样,示例解析!)。或者是我添加评论“奇怪的问题”的那个人,作为报应??? (那个 Q 现在已经消失了)。如果是这样:你确实有一些严重的问题。
      【解决方案4】:
      {
       "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
       ...
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-24
        • 1970-01-01
        • 1970-01-01
        • 2012-05-19
        • 2018-01-01
        • 1970-01-01
        • 2013-11-16
        • 1970-01-01
        相关资源
        最近更新 更多