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

Laravel API POST请求拼接JSON时数组转字符串报错问题

解决POST请求中Array to string conversion错误的问题

问题根源

你错误地使用了手动拼接JSON字符串的方式构建请求体,这种做法很容易导致JSON格式不合法,进而触发Array to string conversion错误。手动拼接时,即使json_encode($data)的结果是正确的数组JSON,拼接到固定字符串后也可能出现语法问题(比如多余逗号、转义冲突),让PHP无法正确识别请求体的类型。

正确解决方案

不要手动拼接JSON,先构建完整的PHP数组结构,再一次性转换为合法的JSON字符串,同时设置正确的请求头。

1. 构建完整的请求数据数组

// 初始化items数组
$items = [];
foreach ($request->orderItems as $orderItemId) {
    $order_item = OrderItem::where('orderItemId', $orderItemId)->first();
    // 避免空值导致的格式问题,先判断数据是否存在
    if ($order_item) {
        $items[] = [
            "sku" => $order_item->sku,
            "name" => $order_item->name,
        ];
    }
}

// 构建符合API要求的完整请求结构
$requestData = [
    [
        "items" => $items
    ]
];

2. 转换为JSON字符串

// 转成JSON,可选JSON_UNESCAPED_UNICODE保留中文不转义
$jsonData = json_encode($requestData, JSON_UNESCAPED_UNICODE);

3. 设置CURL参数

// 设置POST请求体为JSON字符串
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
// 必须添加Content-Type头,告诉API接收的是JSON格式
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'Content-Type: application/json',
    'Content-Length: ' . strlen($jsonData)
]);

额外说明

  • 之前的错误写法中,手动拼接的JSON可能存在语法错误(比如items字段后多余的逗号),导致API无法解析,同时PHP在处理不规范的字符串时触发类型转换错误。
  • CURLOPT_POSTFIELDS接收数组时,会自动转为application/x-www-form-urlencoded格式,但你需要的是JSON格式,所以必须传入完整的JSON字符串,并设置对应的请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 05:06:34