当 1 条记录时,只有 PHP 循环 JSON 不循环


when 1 record only php loop json are not looped

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

萤火虫 JSON 字符串

这只是 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 条记录,那么它工作正常,为什么?

很简单:两次都返回一个 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;
 }