在 PHP 中处理格式错误的 JSON

2023-11-26

我正在尝试编写一个 php 脚本来处理来自以字符串形式提供“json”的 Web 服务的数据。问题是字符串并不是真正的 json;这是 JavaScript。具体来说,尽管变量被引用,但键未被引用。示例(实际数据更长且更复杂):

{desc:'User defined payload'}

正如所描述的PHP手册, json_decode() 正确地无法解释该字符串。

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

我能想到的唯一解决方案是编写一些修复语法的正则表达式,但这样我就会遇到两个问题。

EDIT

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我只是检查你的字符串

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PHP 中处理格式错误的 JSON 的相关文章

随机推荐

  • 如何在 protobuf 3 中定义可选字段

    我需要在 protobuf proto3 语法 中指定带有可选字段的消息 就proto 2语法而言 我想要表达的信息是这样的 message Foo required int32 bar 1 optional int32 baz 2 根据我
  • Android:如何在继承Activity的类中使用onDraw方法?

    作为初学者 我一直在使用简单的布局 xml 和一个名为 Counter 的类构建一个简单的计数器应用程序 该类派生 扩展 自 Activity 类 现在 我想加载一个位图 png 文件 以放置在计数器旁边 我一直在阅读 onDraw 但它需
  • 指针是否也有任何地址或内存分配?

    如果指针存储变量的地址 那么我们从哪里获得指针呢 我问的是 如果我们直接使用指针 那么一定有一个位置可以从哪里获取这个指针 是的 声明的指针在内存中有自己的位置 在上面的示例中 您有一个变量 b 它存储值 17 int b 17 the v
  • C#:编组包含数组的结构

    我正在做一些 C 互操作工作 我有以下结构 pragma pack push 1 typedef struct unsigned int64 Handle LinkType t Type LinkState t State unsigned
  • 使用 LessCSS 用户定义函数?

    我最近刚刚接触 LessCSS 我遇到了我认为的主要限制 我想知道是否有办法做到这一点 我想说我在某处读到 Sass 允许用户定义函数 但 LessCSS 会做同样的事情吗 我想要做什么 fs 16 either return the va
  • 如何在 Elm 中提交表单?

    这是一个非常基本的问题 但我没有找到任何例子 我有这样的看法 view address model div div text lt ID toString model id form input value model title text
  • SES AWS 错误代码:SignatureDoesNotMatch,状态代码:403

    我在尝试通过 Amazon SES 发送邮件时收到 AWS 错误代码 SignatureDoesNotMatch 状态代码 403 我已确认我使用的是通过以下方式创建的正确凭据https console aws amazon com iam
  • 检查 GET 中是否传递了任何变量

    我已经做了一些搜索 但没有得出任何结果 我确信这是显而易见的 基本上 我试图弄清楚是否有任何内容通过 GET 从表单传递 我知道如何检查单个元素 但我只想快速检查是否有任何内容通过 Cheers 使用时要小心count GET 如果您提交包
  • 如何在ActionBar的导航选项卡中设置自定义View并使选项卡适应其高度?

    我正在使用ActionBar我想设置一个自定义View在导航选项卡中 选项卡的高度似乎是固定的 我的自定义View较大 所以不适合 我尝试自定义样式 如下所示 但它并没有使选项卡更高 如何让选项卡的高度适应我的自定义View size 我知
  • 压缩 xml 文件的 Subversion diff

    我正在使用 MySQL Workbench 来维护应用程序的数据库架构 这 mwbWorkbench 使用的文件是一个压缩的 XML 文档 保存在 Subversion 存储库中 该文件被 Subversion 视为二进制数据 因此我无法使
  • 有没有办法跟踪批处理文件的执行情况?

    我继承了一些大型批处理文件 我想将它们重写为更 开发人员友好 的语言 我想了解以下几点 它调用了什么其他脚本 它启动了哪些其他进程 它写入哪些文件 它使用哪些环境变量 设置哪些环境变量 对于最后一点 我知道在开始之前我可以这样做 set g
  • Opengls eglCreateWindowSurface GL 错误 EGL_BAD_ALLOC

    我正进入 状态eglCreateWindowSurface GL Error EGL BAD ALLOC在三星 Galaxy S6 中安装后首次打开应用程序时 相同的代码在其他设备中运行良好 我尝试清理内存并销毁纹理并在销毁时取消初始化所有
  • 无法在 64 位 Linux 上构建 32 位 Wine

    我正在尝试这样做 使用 automake 配置脚本在 64 位 Linux 上构建 32 位 对我不起作用 编译酒 我在 config log 中找到了这个 configure failed program was confdefs h d
  • 使用 Python 处理 MySQL 未读结果

    我使用 mysql connector 进行 SQL 操作 我有一个简短的脚本 它在光标上执行以下操作 字符串 cursor execute use format db show tables command ALTER TABLE Obj
  • 使用 Array.CreateInstance 和 new 运算符实例化数组的区别

    我可以看到以下两种在 C 中实例化 int 数组的方法 通过 API系统 数组抽象类 var arrayInstance Array CreateInstance typeof int 4 通过各种数组初始化语法 var arrayInst
  • PHP 中的自动图像格式检测

    我正在寻找一种方法来获取当前放置在临时位置的用户上传的图像 例如 tmp jkhjkh78 并从中创建 php 图像 自动检测格式 有没有比一堆尝试 捕获 jpeg 图像 png 图像等更聪明的方法来做到这一点 这是的功能之一获取图像大小
  • iPhone 上的内嵌 html5 视频

    我想在 iPhone 上播放 HTML5 视频 但每当我尝试播放时 当调用视频 play 时 iPhone 都会自动弹出全屏 如何在 iPhone 不改变 UI 的情况下内嵌播放视频 如下所示 http www easy bits com
  • 使用 kubernetes 执行器时 Airflow-dag_id 无法找到问题

    我正在使用气流稳定的 Helm Chart 并使用 Kubernetes Executor 正在为 dag 安排新的 pod 但它因 dag id 无法找到问题而失败 我正在使用 git sync 来获取 dags 以下是错误和 kuber
  • UITableViewCell 圆角和剪辑子视图

    我在任何地方 搜索引擎 文档 此处等 都找不到任何内容来显示如何在也剪辑子视图的元素上创建圆角 尤其是在分组表视图中 我有代码可以正确地从具有 4 个弧 圆角 的路径创建一个圆角矩形 该代码已在我的子类 uitableviewcell 中的
  • 在 PHP 中处理格式错误的 JSON

    我正在尝试编写一个 php 脚本来处理来自以字符串形式提供 json 的 Web 服务的数据 问题是字符串并不是真正的 json 这是 JavaScript 具体来说 尽管变量被引用 但键未被引用 示例 实际数据更长且更复杂 desc Us