非常に奇妙な問題が発生しました。
私はJSONウェブサービスを持っています。
私はこのウェブサイトhttp://www.freeformatter.com/json-formatter.html#ad-output でそれをチェックするとき
すべてOKです。
しかし、私はこのコードで私のJSONをロードするとき。
$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;
}
SYNTAX ERRORというエラーが出ました。
というエラーが表示され、全く役に立ちません。
悪夢です。
PHP 5.5では、この関数が使えるようです : http://php.net/manual/en/function.json-last-error-msg.php
(しかし、私はまだPHP 5.5をインストールすることに成功していませんし、この関数が私に詳細を与えるかどうかはわかりません)
私も同じ問題に直面しました。実際、いくつかの隠された文字が見えないので、それを削除する必要があります。 以下は、多くの場合において有効なグローバルコードです。
<?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);
?>