json_decode是否在有效字符串上返回null?

时间:2020-01-06 05:55:49

标签: php json

嗨,我有一个简单的字符串,称为$response1:

{"SN":"5054494EA805743F","MAC":"CC:19:A8:xx:xx:xx","customerName":"John doe ","id":"6666","serviceID":"1000","jobid":"12345"}

基本上,我从curl请求中得到了这个字符串,但是当我这样做时 "$ree = json_decode($response1); print_r($ree);返回null。

这是代码段

                $response1 = curl_exec($ch2);
                $ree = json_decode($response1);
                print_r($dee);  
                print_r($response1);

JSON检查器说字符串可以,并且json_last_error()返回0

这是怎么回事?

所有要求的代码

 <?php

            $ch2 = curl_init();
            //initiate http curl connection.
            curl_setopt_array($ch2, array(
                CURLOPT_URL =>  "http://x.x.x.x/Testingsomething.php",
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_ENCODING => "",
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 30,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => "POST",
                CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"JobId\"\r\n\r\nXXXXXXX\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--",
                CURLOPT_HTTPHEADER => array(
                "cache-control: no-cache",
                "content-type: multipart/form-data; boundary=----WebKitFormBoundaryXXXXXXXX",
            ),
            ));
                //$response1 = curl_exec($ch2);
                //$ree = json_decode($response1, true, JSON_THROW_ON_ERROR);
                //print_r($ree);    
                //echo $ree["ontserial"];

                try {  
                  $response1 = curl_exec($ch2);
                  $ree = json_decode($response1, true, 512, JSON_THROW_ON_ERROR);  
                    print_r($response1);
                    print_r($ree);
                    echo $ree;
                }  
                catch (\JsonException $exception) {  
                  echo $exception->getMessage(); // displays "Syntax error"  
                }

1 个答案:

答案 0 :(得分:1)

从PHP 7.3开始,json_decode函数将接受一个新的JSON_THROW_ON_ERROR选项,该选项将使json_decode引发异常,而不是在出错时返回null。这就是您发现问题的方式。

请尝试以下解决方案:

try {  
  $response1 = curl_exec($ch2);
  $ree =json_decode($response1, false, 512, JSON_THROW_ON_ERROR);  
}  
catch (\JsonException $exception) {  
  echo $exception->getMessage(); // displays "Syntax error"  
}