在PHP中处理格式错误的JSON

Chr*_*ris 9 php json

我正在尝试编写一个php脚本来处理来自web服务的数据,该服务将"json"作为字符串传递.问题是字符串不是真正的json; 这是javascript.具体来说,虽然变量是,但不引用键.示例(实际数据更长,更复杂):

{desc:'User defined payload'}
Run Code Online (Sandbox Code Playgroud)

正如php手册所述,json_decode()正确无法解释此字符串.

我的问题是,如何在php中成功解释这样的字符串?

我能想到的唯一解决方案是编写一些修复语法的正则表达式,但后来我遇到了两个问题.

编辑

Hadvig建议使用Services_JSON pear模块,并且看起来像是一个通用的解决方案.安装模块后,我的代码如下所示:

require_once 'PEAR.php';
require_once 'Services/JSON.php';

$Services_JSON = new Services_JSON();
$data = $Services_JSON->decode($malformed_json);
Run Code Online (Sandbox Code Playgroud)

不幸的是,这是缓慢的.要解释整个字符串(约400,000个字符)需要> 36秒!使用正则表达式修复引号然后使用json_decode花了~0.04秒.这是我用过的东西:

// fix single quotes
$s = str_replace("'", '"', $malformed_json);

// fix unquoted keys
$valid_json = preg_replace('/([{\[,])\s*([a-zA-Z0-9_]+?):/', '$1"$2":', $s);

$data = json_decode($valid_json);
Run Code Online (Sandbox Code Playgroud)

当然,如果数据包含任何引号,括号或逗号,这将会中断.

had*_*vig 2

好的。尝试使用这个。http://pear.php.net/pepr/pepr-proposal-show.php?id=198我只是检查你的字符串