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

PHP中validate_json函数无法识别空JSON对象该如何修复?

问题原因

当前使用的validate_json函数存在两处逻辑错误:

  • 强制要求解码后的数组元素数量≥1,空JSON对象{}转换为PHP数组后是空数组,count()结果为0,直接被误判为非法
  • 没有通过JSON解码的内置错误状态判断合法性,仅通过转数组后的格式和长度判断,无法区分「解码失败返回空」和「解码得到空对象/空数组」的两种情况

修正后的函数代码

直接基于PHP内置的JSON解码错误状态判断即可,兼容空对象、空数组等合法JSON格式:

function validate_json($data) {
    // 先排除非字符串、空字符串的情况,空字符串本身不属于合法JSON
    if (!is_string($data) || trim($data) === '') {
        return FALSE;
    }

    // 执行解码
    json_decode($data);
    // 通过解码错误码直接判断是否为合法JSON
    return json_last_error() === JSON_ERROR_NONE;
}

如果你需要限制仅支持JSON对象/数组(不允许"123"、"test"这类合法的JSON标量值),可以调整为以下版本:

function validate_json($data) {
    if (!is_string($data) || trim($data) === '') {
        return FALSE;
    }

    $result = json_decode($data);
    // 解码无错误 + 结果为对象或数组类型
    return json_last_error() === JSON_ERROR_NONE && (is_object($result) || is_array($result));
}

调整后你原有的测试代码传入$empty_json_obj = "{}"会正常输出VALID,符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:48:04