Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.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
JSONLint和PHP JSON_解码之间的差异_Php_Json - Fatal编程技术网

JSONLint和PHP JSON_解码之间的差异

JSONLint和PHP JSON_解码之间的差异,php,json,Php,Json,在下面的代码中,$datastring变量中的JSON作为JSONLint上的有效JSON传递 然而,当使用PHP的json_编码时,我得到了语法错误 我能做些什么来解决这个问题?我试着去掉斜线,但得到同样的错误 $datastring = '[{"Program": 3034370,"Column": "CLI_RID","Value": "1006278"},{"Program": 3034370,"Column": "Filename","Value": "\\\\henery\\1006

在下面的代码中,$datastring变量中的JSON作为JSONLint上的有效JSON传递

然而,当使用PHP的json_编码时,我得到了语法错误

我能做些什么来解决这个问题?我试着去掉斜线,但得到同样的错误

$datastring = '[{"Program": 3034370,"Column": "CLI_RID","Value": "1006278"},{"Program": 3034370,"Column": "Filename","Value": "\\\\henery\\1006278\\CONFIRMATION LETTER AVAILABLE.html"},{"Program": 3034370,"Column": "EVENT_CODE","Value": "20120725ZZAQ"},{"Program": 3034370,"Column": "DOC_NAME","Value": "Confirmation Email"},{"Program": 3034370,"Column": "PrintDate","Value": "20120410"},{"Program": 2959623,"Column": "ISSUE","Value": "Res Spring"},{"Program": 2959623,"Column": "FILENAME","Value": "~/Res/Mag.aspx?I=res_spring&P=1006278"}]';
$data = json_decode($datastring, true);

// Define the errors.
$json_errors = array(
    JSON_ERROR_NONE => 'No error has occurred',
    JSON_ERROR_DEPTH => 'The maximum stack depth has been exceeded',
    JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded',
    JSON_ERROR_SYNTAX => 'Syntax error',
);

if(!$data) {
echo 'Last error : '. $json_errors[json_last_error()]. PHP_EOL. PHP_EOL;
} else {
echo print_r($data, true);
}

我将从ASP.Net页面获取此JSON字符串。

您需要更多的反斜杠,而不是更少;由于在字符串文本中使用,PHP会将一个级别本身剥离。

如果在PHP文本常量中写入字符串,则必须将所有斜杠加倍。因此,当原始JSON类似于:

{"foo": "backslash: \\"}
对应的php字符串文字为:

$json = '{"foo": "backslash: \\\\"}';

反斜杠已经加倍了。不,不是。代码包含php文本
“\\\\henery\\1006278\\CONFIRMATION LETTER AVAILABLE.html”
,它是字符串
“\\henery\1006278\CONFIRMATION LETTER AVAILABLE.html”
。在JSON中,字符串中的反斜杠必须转义,
\1
是无效的文本。@MB34:它需要四倍。不能用addslashes这样做,因为它也会将它们添加到引号中。正如我上面提到的,字符串将来自ASP。那么问题中的代码是不准确的,因为它以字符串文本的形式显示。