Saya punya masalah yang sangat aneh.
Saya memiliki layanan web JSON.
Ketika saya memeriksanya dengan situs web ini http://www.freeformatter.com/json-formatter.html#ad-output
Semuanya baik-baik saja.
Tetapi ketika saya memuat JSON saya dengan kode ini:
$data = file_get_contents('http://www.mywebservice');
if(!empty($data))
{
$obj = json_decode($data);
switch (json_last_error()) {
case JSON_ERROR_NONE:
echo ' - JSON_ERROR_NONE';
break;
case JSON_ERROR_DEPTH:
echo ' - JSON_ERROR_DEPTH';
break;
case JSON_ERROR_STATE_MISMATCH:
echo ' - JSON_ERROR_STATE_MISMATCH';
break;
case JSON_ERROR_CTRL_CHAR:
echo ' - JSON_ERROR_CTRL_CHAR';
break;
case JSON_ERROR_SYNTAX:
echo "\r\n\r\n - SYNTAX ERROR \r\n\r\n";
break;
case JSON_ERROR_UTF8:
echo ' - JSON_ERROR_UTF8';
break;
default:
echo ' - Unknown erro';
break;
}
Saya mendapatkan kesalahan : SYNTAX ERROR
YANG TIDAK MEMBANTU SAMA SEKALI.
Ini adalah mimpi buruk.
Saya melihat bahwa dengan PHP 5.5 saya dapat menggunakan fungsi ini: http://php.net/manual/en/function.json-last-error-msg.php
(tapi saya belum berhasil menginstal PHP 5.5, dan saya tidak yakin fungsi ini akan memberi saya lebih banyak detail)
Saya menghadapi masalah yang sama, sebenarnya ada beberapa karakter tersembunyi yang tidak terlihat dan Anda perlu menghapusnya. Berikut ini adalah kode global yang dapat digunakan untuk banyak kasus:
<?php
$checkLogin = file_get_contents("http://yourwebsite.com/JsonData");
// This will remove unwanted characters.
// Check http://www.php.net/chr for details
for ($i = 0; $i <= 31; ++$i) {
$checkLogin = str_replace(chr($i), "", $checkLogin);
}
$checkLogin = str_replace(chr(127), "", $checkLogin);
// This is the most common part
// Some file begins with 'efbbbf' to mark the beginning of the file. (binary level)
// here we detect it and we remove it, basically it's the first 3 characters
if (0 === strpos(bin2hex($checkLogin), 'efbbbf')) {
$checkLogin = substr($checkLogin, 3);
}
$checkLogin = json_decode( $checkLogin );
print_r($checkLogin);
?>
Anda belum menampilkan JSON Anda tetapi ini terdengar seperti urutan UTF-8 yang tidak valid dalam argumen, sebagian besar validator online tidak akan menangkapnya. pastikan data Anda adalah UTF-8 dan juga periksa apakah ada karakter asing. Anda tidak memerlukan PHP5 untuk melihat kesalahan Anda, gunakan error_log() untuk mencatat masalah.