我试图回显由数组组成的json编码数组,但我不知道这不是让我打印该东西。这是我的代码:
<?php include_once('confi.php'); header('Content-type: application/json'); if ($_SERVER['REQUEST_METHOD'] == "POST") { $lastRecord = isset($_POST['lastRecordID']) ? mysql_real_escape_string($_POST['lastRecordID']) : ""; $queryForTotalRec = mysql_query("SELECT customer_id FROM `WebServiceTesting`.`sapphire` ORDER BY customer_id DESC LIMIT 1"); $total_rec = mysql_fetch_row($queryForTotalRec); if($total_rec){ $queryForAllRecords = "SELECT * FROM `WebServiceTesting`.`sapphire` WHERE customer_ID BETWEEN %d AND %d"; $get_all_recs = mysql_query(sprintf($queryForAllRecords, $lastRecord, $total_rec[0])); $json = array(); while($row = mysql_fetch_assoc($get_all_recs)){ $json[] = array("Status" => 1, "NewRecord" => $row); } print_r($json); echo json_encode($json); }else{ $json = array("status" => 0, "Error_Message" => mysql_error()); echo json_encode($json); } }else{ $json = array("status" => 0, "Error_Message" => "Request Method not correct"); echo json_encode($json); } @mysql_close($conn);
错误:格式错误的JSON:意外的“ A”有时是“ I”
当我删除print_r行时,我会得到:没有收到响应当我在打印$ json数组时,我会得到153,但没有其他输出。
我尝试过的事情:
我读了一些解决类似问题的解决方案,例如,您需要使用array_values():
echo json_encode(array_values($json));
相同的回复:“未收到回复”
我还尝试将echo $ json放入循环中,我知道这在概念上是错误的,但仍然会出现预期的错误“语法错误”
另外,我尝试通过foreach进行回显,没有任何运气语法错误,但是我可以看到原始输出,但无法验证json。
仅针对print_r的信息,这是响应:
Array ( [0] => Array ( [Status] => 1 [NewRecord] => Array ( [customer_id] => 1241 [firstName] => Katy [lastName] => Lest [email] => klest@yahoo.com [phone] => 787012425 ) ) [1] => Array ( [Status] => 1 [NewRecord] => Array ( [customer_id] => 1242 [firstName] => Hanah [lastName] => Morrisn [email] => road@gmail.com [phone] => 144221275 ) ) [2] => Array ( [Status] => 1 [NewRecord] => Array ( [customer_id] => 1243 [firstName] => James [lastName] => McGrath [email] => rosamcgrath@hotmail.com [phone] => 79684312 ) ) )
刚刚找到了一种解决方案,我仍在寻找任何人可以提供帮助的原因。我要提取的记录数是150多个,所以我一次只尝试了50个记录,效果很好。有人知道我如何才能实际为阵列分配更多的内存,以便它一次只能容纳所有必需的数据?
我也尝试过通过给出准确的索引来尝试,我认为该数组会耗尽内存,但这甚至无法正常工作:
$json = new SplFixedArray($difference);
非常感谢您的协助。
刺入黑暗:您的某些数据库行包含非ASCII字符(例如ü,é等)。您的数据库连接设置为latin1,因此数据不是UTF-8编码的。json_encode需要UTF-8编码的数据。如果获取足够的行,将存在其中包含此类非UTF-8数据的行,并且将json_encode失败。如果行数很少,您碰巧不会碰到那些有问题的行。
latin1
json_encode
通过输出echo json_last_error_msg();after进行测试json_encode。
echo json_last_error_msg();
当您包含a时,您的浏览器会抱怨无效JSON的原因print_r很简单:因为PHP会输出很多不是JSON的垃圾,浏览器无法将其解码为JSON。
print_r