
本文介绍如何通过类型转换确保 json_encode() 将数组值正确编码为 json 数字(而非字符串),避免意外的双引号包裹,尤其适用于需严格遵循 json schema 或对接前端/api 的场景。
在 PHP 中,json_encode() 会严格依据 PHP 变量的实际类型生成对应的 JSON 值:字符串(string)→ JSON 字符串(带双引号),整数(int)→ JSON 数字(无引号),浮点数(float)→ JSON 数字,布尔值(bool)→ true/false 等。若你观察到类似 {"plate":"LQT 883","model":"-1584460854"} 的输出,说明 $row['item'] 在 PHP 中是字符串类型(例如数据库字段为 VARCHAR 或未显式转换),即使内容全是数字,json_encode() 仍会将其序列化为 JSON 字符串。
✅ 正确做法是显式类型转换,确保该值以整数形式参与编码:
echo json_encode([
"plate" => $randomString . $result_4 . $plate,
"model" => (int)$row['item'] // 强制转为整型
], JSON_UNESCAPED_UNICODE); // 推荐添加此标志以支持中文等 Unicode 字符(PHP 5.4+)⚠️ 注意事项:
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联JavaScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR外挂函数库的强大功能,对常用的、强大的包
- (int) 转换对非数字字符串(如 "abc" 或 "")会返回 0,可能掩盖数据异常;建议先校验:
"model" => is_numeric($row['item']) ? (int)$row['item'] : null
- 若 $row['item'] 可能为大整数(超出 PHP int 范围,如 64 位系统上 > 2¹⁰⁰),(int) 会导致溢出或截断;此时应确认业务是否真需整数语义——若仅需“无引号数字”,且数值极大,可考虑用 float 或保留字符串并由接收方解析。
- 避免使用 intval() 替代 (int):二者行为基本一致,但 (int) 更简洁、性能略优;intval() 在指定进制时更灵活(此处无需)。
- 不要尝试用 str_replace() 或正则处理 json_encode() 输出——这违反 JSON 规范,极易引发解析错误,属于反模式。
总结:JSON 的类型语义源于 PHP 源数据类型。要输出无引号的数字,关键不是修改 json_encode() 的输出,而是确保传入的值本身就是 int 或 float。一次精准的类型转换,胜过后续所有字符串修补。
立即学习“PHP免费学习笔记(深入)”;










