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

PHP正则格式化无引号JSON字符串,解决含逗号文本格式问题

PHP正则修复含内部逗号的无效JSON

问题分析

你遇到的无效JSON核心问题有两个:

  • 键和值均未包裹双引号,不符合JSON规范
  • 值内部包含逗号,直接用str_replace会错误将这些逗号识别为键值对的分隔符,导致值被切割

原始无效JSON:

[{2:,0:1,1:Rodapi\u00e9s 1-a, 2-a, bloque 6}]

目标有效JSON:

[{"2":"","0":"1","1":"Rodapi\u00e9s 1-a, 2-a, bloque 6"}]

正则解决方案

利用正则匹配数字键的特征,并通过正向预查精准识别每个键值对的边界,避免误切割值内部的逗号。

代码实现

$invalidJson = '[{2:,0:1,1:Rodapi\u00e9s 1-a, 2-a, bloque 6}]';

// 正则替换:给数字键和对应值添加双引号,同时保留值内部的逗号
$validJson = preg_replace('/(\d+):([^,]*?(?=\d+:|}))/s', '"$1":"$2"', $invalidJson);

// 验证结果
var_dump($validJson);
$data = json_decode($validJson, true);
var_dump($data);

正则表达式说明

  • (\d+):捕获数字类型的键,作为分组1
  • ::匹配键和值之间的冒号
  • ([^,]*?(?=\d+:|})):非贪婪匹配值内容,直到遇到下一个数字:(下一个键的开头)或}(对象结束),确保值内部的逗号被完整保留
  • /s修饰符:让.匹配换行符(这里虽无换行,但兼容复杂场景)

输出结果

执行后得到的有效JSON完全符合目标格式,json_decode可以正常解析出数组:

string(71) "[{"2":"","0":"1","1":"Rodapi\u00e9s 1-a, 2-a, bloque 6"}]"
array(1) {
  [0]=>
  array(3) {
    ["2"]=>
    string(0) ""
    ["0"]=>
    string(1) "1"
    ["1"]=>
    string(31) "Rodapiés 1-a, 2-a, bloque 6"
  }
}

内容的提问来源于stack exchange,提问作者LauraEld

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 09:22:04