PHP处理JSON字符串Key缺少双引号的解决方法

Jasper
Jasper
发布时间:2026-10-14| 4人浏览过
原创

在使用PHP解析API返回的JSON数据时,偶尔会遇到键名(Key)未包含双引号的“非标准”JSON格式,导致内置函数 json_decode 报错或返回 NULL。通过引入自定义的正则替换逻辑,可以在解码前自动为缺失双引号的Key补全标记,从而实现无缝兼容。

问题现象与原因分析

标准的JSON规范要求所有字符串Key必须被双引号包裹。然而,部分第三方服务或非严格遵循RFC标准的数据源可能会返回如下格式的字符串:

{name:"fdipzone"}

若直接使用PHP的 json_decode 函数解析上述字符串,将因格式非法而失败:

<?php
$str = '{"name":"fdipzone"}';
var_dump(json_decode($str, true)); // array(1) { ["name"]=> string(8) "fdipzone" }

$str1 = '{name:"fdipzone"}';
var_dump(json_decode($str1, true)); // NULL
?>

在这种情况下,我们需要一种预处理机制来规范化输入数据。

解决方案:正则匹配与替换

第1步:定义兼容解析函数

目的:创建一个封装函数,在处理前检查并修复JSON格式。

原理:利用 preg_replace 检测形如 word: 的模式,并将其替换为 "word":。这适用于大多数简单的非标准JSON场景。

操作代码:

<?php
/**
 * 兼容 Key 没有双引括起来的 JSON 字符串解析
 *
 * @param String $str   JSON字符串
 * @param boolean $mode  true:返回Array, false:返回Object
 * @return Array/Object|NULL
 */
function ext_json_decode($str, $mode = false){
  // 检测是否存在类似 key:value 但 key 无双引号的情况
  if(preg_match('/\w+:/is', $str)){
    // 使用正则将 'key:' 替换为 '"key":'
    $str = preg_replace('/([a-zA-Z0-9_]+):/is', '"$1":', $str);
  }
  return json_decode($str, $mode);
}

// 测试正常情况
$str = '{"name":"fdipzone"}';
var_dump(ext_json_decode($str, true)); 
// 输出: array(1) { ["name"]=> string(8) "fdipzone" }

// 测试Key无双引号的情况
$str1 = '{name:"fdipzone"}';
var_dump(ext_json_decode($str1, true)); 
// 输出: array(1) { ["name"]=> string(8) "fdipzone" }
?>

第2步:集成到业务逻辑中

在获取API响应后,调用 ext_json_decode 替代原有的 json_decode。这样既能处理标准JSON,也能容错处理少数不规范的非标JSON。

注意事项与风险排查

  • 正则局限性:上述正则 /([a-zA-Z0-9_]+):/is 仅覆盖简单的字母、数字和下划线开头的Key。如果Key包含特殊字符、空格或中文,可能需要更复杂的正则规则或依赖更严格的JSON修复库。
  • 性能考量:增加正则替换步骤会带来轻微的性能开销,对于高并发场景,建议仅在确认接收非标数据时使用此兼容层,或通过上游服务修正数据格式。
  • 安全性:正则替换不应直接修改未经校验的用户输入,避免注入攻击。确保数据来源可信后再执行格式清洗。

以上就是PHP处理JSON字符串Key缺少双引号的详细内容,更多关于PHP JSON数据解析的技巧请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。