Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php json_decode返回json_ERROR_语法,但在线格式化程序表示json正常_Php_Json - Fatal编程技术网

Php json_decode返回json_ERROR_语法,但在线格式化程序表示json正常

Php json_decode返回json_ERROR_语法,但在线格式化程序表示json正常,php,json,Php,Json,我遇到了一个非常奇怪的问题 我有一个JSON Web服务 当我查看这个网站时 一切都好 但当我用以下代码加载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_E

我遇到了一个非常奇怪的问题

我有一个JSON Web服务

当我查看这个网站时

一切都好

但当我用以下代码加载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;
}
我得到了错误:语法错误

这完全没有帮助

这是一场噩梦

我发现,在PHP 5.5中,我可以使用以下函数:


(但我还没有成功安装PHP5.5,我不确定这个函数是否会提供更多细节)

您还没有显示JSON,但这听起来可能是一个无效的UTF-8序列,大多数在线验证程序都无法捕获它。 确保数据为UTF-8,并检查是否有外来字符。
您不需要PHP5来查看错误,使用它来记录问题。

您还没有显示JSON,但这听起来可能是一个无效的UTF-8序列,大多数在线验证程序都无法捕获它。 确保数据为UTF-8,并检查是否有外来字符。
您不需要PHP5来查看错误,使用它来记录问题。

我也遇到了同样的问题,实际上有一些隐藏字符未被看到,您需要将其删除。 以下是适用于多种情况的全局代码:

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

我也遇到了同样的问题,实际上有些隐藏字符是看不见的,你需要删除它。
以下是适用于多种情况的全局代码:

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

我解决了这个问题,在json_解码之前,在字符串中添加了stripslashes

$data = stripslashes($data); 
$obj = json_decode($data);

我解决了这个问题,在json_解码之前,在字符串中添加stripslashes

$data = stripslashes($data); 
$obj = json_decode($data);

删除
BOM
(字节顺序标记)通常是您需要的解决方案的倍:

function removeBOM($data) {
    if (0 === strpos(bin2hex($data), 'efbbbf')) {
       return substr($data, 3);
    }
    return $data;
}
你不应该有BOM表,但如果它在那里,它是不可见的,所以你不会看到它


如果需要修复大量文件,请使用。

删除
BOM
(字节顺序标记)通常是所需解决方案的倍:

function removeBOM($data) {
    if (0 === strpos(bin2hex($data), 'efbbbf')) {
       return substr($data, 3);
    }
    return $data;
}
你不应该有BOM表,但如果它在那里,它是不可见的,所以你不会看到它


如果有很多文件需要修复,请使用。

我也有同样的问题。对我来说,这是由回声引起的。我试图使用
exit(json_encode(utf8ize($resp_array)),将json字符串传递给另一个php文件在文件的开头,我已经清除了换行标记。。。所以这对我来说是个错误。除去这个换行符标记,我可以将我的json字符串解码到另一个php文件中。

我也遇到了同样的问题。对我来说,这是由回声引起的。我试图使用
exit(json_encode(utf8ize($resp_array)),将json字符串传递给另一个php文件在文件的开头,我已经清除了换行标记。。。所以这对我来说是个错误。除去这个换行符标记,我可以将我的json字符串解码到另一个php文件中。

为了把所有东西放在一起,我准备了json包装器,其中包含解码自动纠正操作。最新版本可在my中找到


为了把所有东西放在一起,我准备了JSON包装器,其中包含解码自动纠正操作。最新版本可在my中找到


我也有同样的问题。对我来说,这是由
echo“
引起的
在文件开始时,我已清除了换行标记…因此这对我来说是错误的。删除此换行标记后,我能够[…]

我有相同的问题。对我来说,这是由
echo“
引起的
在文件的开头,我已经清除了换行标记。。。所以这对我来说是个错误。除去这个断线标签,我能够[…]

在尝试了所有的解决方案后,没有结果,这是一个适合我的解决方案

希望它能帮助别人

$json = str_replace(array('ï',''), '',$json);

在尝试了所有的解决方案但没有结果后,这是一个适合我的解决方案

希望它能帮助别人

$json = str_replace(array('ï',''), '',$json);

我也有同样的问题。我采取了以下步骤:

  • 更改了JSON文本编码

    $content = json_decode(json_encode($content), true);
    
  • 然后我在解码之前查看了纯文本。我发现了一些疯狂的符号,比如

    i

  • 然后我就把它脱掉了

         "expectedToBeReturned":1,
         "inventoryNumber":001,
         "remindNote":"",
    
    我成功地解码了我的JSON


  • 我也有同样的问题。我采取了以下步骤:

  • 更改了JSON文本编码

    $content = json_decode(json_encode($content), true);
    
  • 然后我在解码之前查看了纯文本。我发现了一些疯狂的符号,比如

    i

  • 然后我就把它脱掉了

         "expectedToBeReturned":1,
         "inventoryNumber":001,
         "remindNote":"",
    
    我成功地解码了我的JSON


  • 我也有同样的问题,接收JSON\u ERROR\u CTRL\u CHARJSON\u ERROR\u语法
    这是我的解决办法

        function cleanString($val)
        {
            $non_displayables = array(
            '/%0[0-8bcef]/',            # url encoded 00-08, 11, 12, 14, 15
            '/%1[0-9a-f]/',             # url encoded 16-31
            '/[\x00-\x08]/',            # 00-08
            '/\x0b/',                   # 11
            '/\x0c/',                   # 12
            '/[\x0e-\x1f]/',            # 14-31
            '/x7F/'                     # 127
            );
            foreach ($non_displayables as $regex)
            {
                $val = preg_replace($regex,'',$val);
            }
            $search  = array("\0","\r","\x1a","\t");
            return trim(str_replace($search,'',$val));
        }
    

    我也有同样的问题,接收JSON\u ERROR\u CTRL\u CHARJSON\u ERROR\u语法
    这是我的解决办法

        function cleanString($val)
        {
            $non_displayables = array(
            '/%0[0-8bcef]/',            # url encoded 00-08, 11, 12, 14, 15
            '/%1[0-9a-f]/',             # url encoded 16-31
            '/[\x00-\x08]/',            # 00-08
            '/\x0b/',                   # 11
            '/\x0c/',                   # 12
            '/[\x0e-\x1f]/',            # 14-31
            '/x7F/'                     # 127
            );
            foreach ($non_displayables as $regex)
            {
                $val = preg_replace($regex,'',$val);
            }
            $search  = array("\0","\r","\x1a","\t");
            return trim(str_replace($search,'',$val));
        }
    

    我这边的一个问题是,有一些以0开头的无效数字,例如:“001”、“002”、“003”


    将001替换为1,它就会工作。

    我这边的一个问题是,有一些以0开头的无效数字,例如:“001”、“002”、“003”

    将001替换为1,它就能工作。

    此代码对我有效。 基本上,它删除隐藏字符

    \b  Backspace (ascii code 08)
    \f  Form feed (ascii code 0C)
    \n  New line
    \r  Carriage return
    \t  Tab
    \"  Double quote
    \\  Backslash character
    
    这个代码对我有用。 基本上,它删除隐藏字符

    \b  Backspace (ascii code 08)
    \f  Form feed (ascii code 0C)
    \n  New line
    \r  Carriage return
    \t  Tab
    \"  Double quote
    \\  Backslash character
    

    请先清理json数据,然后加载。

    请先清理json数据,然后加载。

    json字符串必须双引号,json无效,因为您不需要转义
    字符

    "files.encoding": "utf8",
    
    不在列表中

    请参阅JSON中使用的特殊字符列表:

    $response = file_get_contents('http://www.mywebservice');
    header('Content-Type: application/json');
    echo $response;
    

    查看网站了解更多文档。

    JSON字符串必须双引号,JSON无效,因为您不需要转义
    字符

    "files.encoding": "utf8",
    
    不在列表中

    请参阅JSON中使用的特殊字符列表:

    $response = file_get_contents('http://www.mywebservice');
    header('Content-Type: application/json');
    echo $response;
    
    查看网站了解更多文档。

    在我的情况下:

    json_解码(html_实体_解码($json_字符串))

    在我的情况下:


    json_解码(html_实体_解码($json_字符串))

    我也面临这个问题,而且