php - 在 PHP 中处理格式错误的 JSON

标签 php json

我正在尝试编写一个 php 脚本来处理来自将“json”作为字符串提供的网络服务的数据。问题是字符串不是真正的 json;这是javascript。具体来说,键没有被引用,但变量被引用。示例(实际数据要长得多,复杂得多):

{desc:'User defined payload'}

php manual 所述, 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);

不幸的是,这很慢。解释整个字符串(~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);

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

最佳答案

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

关于php - 在 PHP 中处理格式错误的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6836548/

相关文章:

php - 如何创建布局模板 - 静态网站

php - 因此不允许本地主机访问

json - Express.js 中的 POST 数据 JSON 验证

c# - 允许字母、数字、小数、空格和下划线的正则表达式模式

php - PDO mySQL 中的命名占位符导致服务器错误

php - 使用 header 重定向,但 http 代码始终为 200

php - 拉YouTube观看次数

android - 在 android map v2 中创建自定义样式 map 时无法解析 setMapStyle()

javascript - 将 id 从 json 传递到 js 到对话框弹出

php - FullCalendar - 如何根据日历上数据库(mysql)表行的逗号分隔日期显示事件