当1记录只有php循环json没有循环

时间:2013-12-13 13:31:29

标签: php json

    <?php
    $data = file_get_contents("php://input");

    $json = json_decode($data); 

    mysql_connect("localhost", "root", "12345") or die("Could not connect");
    mysql_select_db("db_shuttlebus") or die("Could not select database");

    foreach($json as $obj){
   echo $obj->_id;
    }
    ?>

firebug json string

这只是1条记录json字符串 {"_id":2,"Route_Seq":2,"Location_Name":"ABC","Route_LocationID":6,"Route_ID":"1","id":null}

这是2条记录,并且工作正常

[{"_id":2,"Route_Seq":1,"Location_Name":"perak","Route_LocationID":"6","Route_ID":"1","id":null},{"_id":1,"Route_Seq":2,"Location_Name":"TRY","Route_LocationID":"1","Route_ID":"1","id":null}]

更新:当json只有1条记录时,它就不会循环,
 如果超过1条记录那么它工作正常,为什么?

1 个答案:

答案 0 :(得分:1)

简单:两次都返回一个JSON数组。 foreach遍历数组而你没有给它一个。包含一个元素的数组没有任何问题。

您对一条记录的JSON应如下所示:

 [{"_id":2,"Route_Seq":2,"Location_Name":"ABC","Route_LocationID":6,"Route_ID":"1","id":null}]

如果您无法更改返回的数据的形式,请在循环之前使用函数is_array进行测试,并将一条记录作为特殊情况处理。

具体来说,您可以使用以下内容替换底部的循环:

 if(is_array($json)) {
      foreach($json as $obj){
           echo $obj->_id;
      }
 } else {
      echo $json->_id;
 }