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

PHP中json_encode()未输出带方括号JSON数组的问题解决

问题产生原理

PHP的json_encode()对数组的编码有固定映射规则,和JSON的两种基础结构一一对应:

  • 当传入的数组是从0开始的连续数字索引数组(不存在字符串键、数字索引无跳号)时,会编码为带方括号[]的JSON数组
  • 当传入的数组是关联数组(存在字符串键、或数字索引不连续)时,会编码为带花括号{}的JSON对象

你最初的代码里,applicants字段直接赋值为存储用户信息的关联数组,符合第二种编码规则,所以输出的是直接的JSON对象,没有外层数组方括号。而接收端接口定义applicants字段为数组类型(设计上支持传入多个申请人,即使当前只传1个也要求用数组格式包裹),类型不匹配就会导致解析失败。

你提到的参考文档示例时\n写法报错,一般是复制示例时遗漏了上下文的常量参数(比如格式化输出的JSON_PRETTY_PRINT相关配置),属于书写语法错误,和核心的数组类型映射逻辑无关。

其他合规实现写法

除了你已经使用的写法,还有几种等价的合规实现,编码输出效果完全一致:

  • 提前定义单条申请人数据,再直接包裹为索引数组,避免重复书写数组结构:
// 先定义单个申请人的关联数组
$applicant = [
    "firstName" => $_POST["firstName"],
    "lastName" => $_POST["lastName"],
    "email" => $_POST["email"],
    "telephone" => $_POST["telephone"]
];
// 组装数据时直接包裹成数组即可
$data = [
    "applicants" => [$applicant], // 直接把单条数据放到空索引数组里
    "buyerType" => $_POST["buyerType"],
    "organisationId" => "xxxxxxxxxx"
];
  • 传统array()语法和短数组[]语法完全等价,两种写法编码结果没有区别,根据团队编码规范选择即可:
// 传统写法和短数组写法效果一致
"applicants" => array(
    array(
        "email" => $_POST["email"],
        // 其余申请人字段
    )
)

注意:不要为了调整输出格式误用json_encode()的参数,比如JSON_FORCE_OBJECT的作用是把所有数组强制编码为对象,和你需要的数组输出效果完全相反,使用前需要确认参数实际作用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:06:18