You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP json_decode解析非标准JSON遇引号问题,求解决方案

解决非标准JSON转PHP数组的问题

方法一:完善正则表达式,补全字符串值的引号

你已经完成了键名的引号补全,接下来可以用另一段正则,为非布尔、非数字的字符串值添加引号:

// 先处理键名
$json = preg_replace('/([{,])(\s*)([A-Za-z0-9_\-]+?)\s*:/', '$1"$3":', $json);
// 再处理字符串值(排除true/false、数字、{}[])
$json = preg_replace('/:\s*([^"{}\[\],\s\d]+)(?=[,\}])/', ': "$1"', $json);

这段正则会匹配冒号后、逗号或大括号前的内容,只要不是布尔值(true/false)、数字、符号,就给它套上引号。处理后你的JSON会变成标准格式:

{"mDetailedState":"CONNECTED","mExtraInfo":"3gnet","mIsAvailable":true}

之后就能正常用json_decode($json, false)解析了。

方法二:使用PHP的替代解析方案

如果正则容易出错(比如值里包含特殊字符),可以用eval(注意:仅当你完全信任这段JSON的来源时使用,避免安全风险):

// 把非标准JSON转成PHP数组格式的字符串
$phpStr = str_replace([':', '{', '}'], ['=>', '[', ']'], $json);
// 用eval解析成数组
eval('$result = ' . $phpStr . ';');

这样直接把非标准JSON转成PHP数组语法,解析后就能得到目标数组。

正则学习参考资料

如果想系统学习正则,推荐:

  • PHP官方文档的PCRE正则表达式章节
  • 《正则表达式必知必会》这本书,适合新手快速入门

内容的提问来源于stack exchange,提问作者Pak Ho Cheung

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 04:10:12