php对象与json互转主要依靠json_encode()和json_decode(),仅public属性被序列化,可实现jsonserializable接口自定义逻辑;json_decode()第二参数控制返回stdclass或关联数组,反向转换需手动赋值,注意循环引用、浮点精度及datetime等特殊类型处理。

PHP对象和JSON互转主要靠 json_encode() 和 json_decode() 两个函数,但要注意对象属性的可见性、类型兼容性以及编码/解码时的选项控制。
对象转JSON:用 json_encode()
直接传入对象即可,但仅 public 属性会被序列化,private 和 protected 属性默认忽略。
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
- 确保对象属性是 public,或通过实现
JsonSerializable接口自定义导出逻辑 - 中文不乱码:默认支持 UTF-8,无需额外处理(前提是源文件和数据本身是 UTF-8)
- 想保留空数组或 null 值,不用额外操作;如需格式化输出(带缩进),加参数
JSON_PRETTY_PRINT - 示例:
$user = new stdClass();<br>$user->name = "张三";<br>$user->age = 25;<br>echo json_encode($user, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
JSON转对象:用 json_decode() 控制返回类型
第二个参数决定返回的是 stdClass 对象还是关联数组:
-
json_decode($json)→ 返回stdClass对象(默认) -
json_decode($json, true)→ 返回关联数组 - 遇到解析失败时返回
null,建议用json_last_error()检查错误 - 如果要转成指定类的实例(非 stdClass),需先解码为数组,再手动赋值或用构造方法/反射
自定义类对象与JSON深度互转
普通类默认只序列化 public 属性。如需更灵活控制,推荐实现 JsonSerializable 接口:
- 在类中定义
jsonSerialize()方法,返回你想导出的数据结构(数组) - 反向转换(JSON→指定类)没有内置机制,常见做法是:先
json_decode($json, true)得到数组,再用该数组初始化对象(如new User($data)) - 注意日期、资源、闭包等类型无法直接 JSON 序列化,需提前转换为字符串或跳过
常见坑和注意事项
- 对象中有循环引用会报错,需提前检测或使用第三方库(如
symfony/serializer) - 浮点数精度问题:PHP 默认可能截断小数位,可设
ini_set('serialize_precision', '-1')(PHP 7.1+) - JSON 中无整型和浮点型区分,全按数字处理;布尔值、null 会正确映射
- 时间对象(DateTime)需手动转为字符串,例如
$date->format('Y-m-d H:i:s')
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










