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
相关产品推荐
相关产品推荐

