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

PHP中多行JSON数据含单引号的解析问题

PHP解析含单引号的JSON失败的解决办法

原代码存在的问题

  1. 变量名不匹配:定义的JSON字符串变量是$arr,但json_decode传入的是未定义的$dat,直接导致解析失败。
  2. JSON语法错误:
    • PHP用单引号包裹JSON字符串时,Baldwin's中的单引号会提前闭合外层单引号,破坏整个JSON结构。
    • JSON对象最后一个键值对后不能加逗号(原代码中"Spink"后的逗号属于无效语法)。
  3. 转义错误:原字符串中的"是HTML实体,而非JSON要求的双引号转义符\",这会导致JSON结构识别失败。

修正后的代码示例

方法1:转义双引号,直接保留单引号

用双引号包裹JSON字符串,内部双引号转义为\",单引号可直接使用:

$arr = "{
    \"38\": {
        \"email\": \"zhangshizhu08@163.com\",
        \"history\": \"Baldwin's,DNW\"
    },
    \"39\": {
        \"email\": \"john@filcombe.com\",
        \"history\": \"Spink\"
    }
}";

$p_array = json_decode($arr, true);
// 排查解析错误
if (json_last_error() !== JSON_ERROR_NONE) {
    echo json_last_error_msg();
} else {
    print_r($p_array);
}

方法2:使用HEREDOC语法(更易读)

HEREDOC无需手动转义双引号,单引号可直接写入,代码更清晰:

$arr = <<<JSON
{
    "38": {
        "email": "zhangshizhu08@163.com",
        "history": "Baldwin's,DNW"
    },
    "39": {
        "email": "john@filcombe.com",
        "history": "Spink"
    }
}
JSON;

$p_array = json_decode($arr, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo json_last_error_msg();
} else {
    print_r($p_array);
}

排查JSON解析错误的技巧

每次调用json_decode后,可通过json_last_error()和json_last_error_msg()获取具体失败原因,快速定位问题:

$p_array = json_decode($arr, true);
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "解析错误:" . json_last_error_msg();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 12:50:26