我正在尝试编写一个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)
当然,如果数据包含任何引号,括号或逗号,这将会中断.
| 归档时间: |
|
| 查看次数: |
6047 次 |
| 最近记录: |