Я пытаюсь повторить 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» иногда «я»
Когда я удаляю строку print_r iam: Ответ не получен. Когда я печатаю счетчик $ json array iam, получая счет 153, но НЕ ДРУГОЙ вывод.
Вещи, которые я пробовал:
я читаю в некоторых решениях аналогичных проблем, которые вам нужно использовать array_values (), например:
echo json_encode(array_values($json));
тот же ответ: «Нет ответа»
Я также попытался поставить echo $ json внутри цикла, который, как я знаю, концептуально неправилен, но все еще и получил ожидаемую ошибку «Синтаксическая ошибка»,
Кроме того, я пробовал эхом через foreach не повезло с синтаксической ошибкой, но я могу видеть результат в raw, но не могу проверить 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
завершится с ошибкой. С несколькими достаточно строк вам не удастся попасть в эти проблематичные строки.
Проверьте это, echo json_last_error_msg();
после json_encode
.
Установите соединение с базой данных на UTF-8. См. Здесь, как это сделать: UTF-8 на всем пути
Причина, по которой ваш браузер жалуется на недопустимый JSON при включении print_r
, прост: потому что тогда PHP выводит много мусора, который не является JSON, который браузер не может декодировать как JSON.
Просто используйте json_decode (), вы получите нужный вам результат.
$array = json_decode($json, true); echo "<pre>"; print_r($array); Array ( [0] => Array ( [Status] => 1 [NewRecord] => Array ( [fname] => xyz [lname] => abc [gender] => male ) ) [1] => Array ( [Status] => 1 [NewRecord] => Array ( [fname] => 123 [lname] => 456 [gender] => male ) ) [2] => Array ( [Status] => 1 [NewRecord] => Array ( [fname] => demo [lname] => vvv [gender] => female ) ) )