php返回json数据怎么包含多个字段_多字段json返回示例【教程】

1次阅读

php json_encode() 返回多字段json需用关联数组或stdclass,索引数组会生成json数组[]而非对象{};须设utf-8 header、避免额外输出,中文用json_unescaped_unicode可原样显示。

php返回json数据怎么包含多个字段_多字段json返回示例【教程】

PHP json_encode() 默认只支持关联数组和对象

PHP 返回多字段 JSON,本质是把含多个键值对的结构序列化成字符串。关键不是“怎么加字段”,而是“用什么数据结构装字段”——json_encode() 对索引数组(数字键)和关联数组(字符串键)行为不同:前者生成 JSON 数组 [],后者生成 JSON 对象 {}接口返回多字段数据,99% 场景要的是对象,所以必须用关联数组或 stdClass 实例。

  • 错误写法:$data = ['name', 'age']; → 得到 ["name","age"](JSON 数组,无字段名)
  • 正确写法:$data = ['name' => '张三', 'age' => 28, 'city' => '杭州']; → 得到 {"name":"张三","age":28,"city":"杭州"}
  • 如果字段名来自变量,用双引号+花括号拼接:$key = 'status'; $data[$key] = 'success';

中文乱码、特殊字符没转义?检查输入数据和 header

json_encode() 默认不处理中文,原始字符串含中文时会直接输出 Unicode 编码(如 "u4f60u597d"),前端解析后能显示但看着费劲;更常见的是直接输出乱码,那是 PHP 文件编码或输出未声明导致的。

  • 确保 PHP 文件保存为 UTF-8 无 bom 格式(编辑器里可设)
  • 发送前加 header('Content-Type: application/json; charset=utf-8');,否则浏览器可能按 ISO-8859-1 解析
  • 想让中文原样输出(非 Unicode),加 JSON_UNESCAPED_UNICODE 参数:json_encode($data, JSON_UNESCAPED_UNICODE)
  • 注意:JSON_UNESCAPED_UNICODE 在 PHP 5.4+ 才支持,老环境只能接受 uXXXX 形式

空值、NULL、0、false 被忽略?其实是正常行为

json_encode() 不会报错,也不会跳过字段,但某些值在 JSON 中有明确含义:null 就是 nullfalse 是布尔值 false0 是数字 0。真正容易出问题的是 PHP 的 null 值被当成“空”而漏传——比如数据库查不到记录,字段是 nulljson_encode() 仍会输出 "field": null,但前端 JS 可能误判为未定义。

  • 若需统一转为空字符串,手动处理:$data['remark'] = $row['remark'] ?? '';
  • 若字段可选,且不想出现在 JSON 中,用 unset($data['optional_field']) 显式删除
  • 避免用 empty() 判断后直接跳过赋值——0"0"false 都会被当成空,导致数值型字段丢失

返回前别忘了 exit 或 die,否则可能混入额外输出

很多 PHP 脚本在 json_encode() 后没终止执行,后面还有 echo、HTML、或者被 include 的其他文件输出了空白符或错误信息,结果 JSON 前后夹杂垃圾内容,前端 JSON.parse() 直接报 Unexpected Token

立即学习PHP免费学习笔记(深入)”;

  • 最稳妥做法:echo json_encode($data, JSON_UNESCAPED_UNICODE); exit;
  • 如果用了框架或路由,确认是否已拦截后续输出(如 laravelresponse()->json() 自动处理)
  • 调试时用 var_dump($data) 看结构,但上线前必须删掉,否则破坏 JSON 格式
  • 开启 display_errors = Off(生产环境),防止 PHP 错误信息混进响应体

多字段 JSON 看似简单,真正卡住人的往往不是语法,而是 header 没设、文件编码不对、或者输出被意外截断——这些地方一错,前端拿到的就是一段无法解析的“假 JSON”。

text=ZqhQzanResources