JSONLint和PHP JSON_DECODE之间的差异

时间:2012-08-14 19:39:14

标签: php json

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

但是,使用PHP的json_encode时出现语法错误。

我该怎么做才能解决这个问题?我试过剥离斜线但得到同样的错误。

$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字符串。

2 个答案:

答案 0 :(得分:3)

如果你在php文字常量中写出一个字符串,你必须加倍所有斜杠。所以当原始JSON类似于:

{"foo": "backslash: \\"}

相应的php字符串文字是:

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

答案 1 :(得分:0)

你需要更多反斜杠,而不是更少; PHP因为你在字符串文字中使用它而剥离了一个级别。