欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

json_decode返回错误代码4解决方法

程序员文章站 2022-06-02 13:18:49
...

有可能是 PHP的版本不兼容 或者是 json的格式不正确 导致。 可以尝试使用如下代码: function jsonEncode($data) {if (2==func_num_args()) {$callee=__FUNCTION__;return json_format_scalar(strval(func_get_arg(1))).":".$callee($data);}is_object($data

有可能是PHP的版本不兼容或者是json的格式不正确导致。
可以尝试使用如下代码:

function jsonEncode($data) {
if (2==func_num_args()) {
$callee=__FUNCTION__;
return json_format_scalar(strval(func_get_arg(1))).":".$callee($data);
}
is_object($data) && $data=get_object_vars($data);
if (is_scalar($data)) { return json_format_scalar($data); }
if (emptyempty($data)) { return '[]';}
$keys=array_keys($data);
if (is_numeric(join('',$keys))) {
$data=array_map(__FUNCTION__,$data);
return '['.join(',',$data).']';
} else {
$data=array_map(__FUNCTION__,array_values($data),$keys);
return '{'.join(',',$data).'}';
}
}
function json_format_scalar($value) {
if (is_bool($value)) {
$value = $value?'true':'false';
} else if (is_int($value)) {
$value = (int)$value;
} else if (is_float($value)) {
$value = (float)$value;
} else if (is_string($value)) {
$value=addcslashes($value,"\n\r\"\/\\");
$value='"'.preg_replace_callback('|[^\x00-\x7F]+|','json_utf_slash_callback',$value).'"';
} else {
$value='null';
}
return $value;
}
function json_utf_slash_callback($data) {
if (is_array($data)) {
$chars=str_split(iconv("UTF-8","UCS-2",$data[0]),2);
$chars=array_map(__FUNCTION__,$chars);
return join("",$chars);
} else {
$char1=dechex(ord($data{0}));
$char2=dechex(ord($data{1}));
return sprintf("\u%02s%02s",$char1,$char2);
}
}
function json_utf_slash_strip($data) {
if (is_array($data)) {
return $data[1].iconv("UCS-2","UTF-8",chr(hexdec($data[2])).chr(hexdec($data[3])));
} else {
return preg_replace_callback('/(?','NULL')
,$data);
$data=preg_replace_callback('/#\d+/',__FUNCTION__,$data);
//抑制错误,诸如{123###}这样错误的JSON是不能转换成PHP数组的
@$data=eval("return $data;");
$strings=$count=0;
return $data;
} elseif (count($data)>1) {//存储字符串
$strings[]=json_utf_slash_strip(str_replace(array('$','\\/'),array('\\$','/'),$data[0]));
return '#'.($count++);
} else {//读取存储的值
$index=substr($data[0],1);
return $strings[$index];
}
}