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

使用wp_remote_post()发送嵌套JSON负载时数据异常求助

使用wp_remote_post发送嵌套JSON数组时,端点收到stock_data: [object Object]的解决方法

问题原因分析

你遇到的问题大概率是以下两种情况之一:

  1. 端点数据处理错误:端点在输出嵌套对象时,直接将对象转为字符串,导致显示[object Object],但实际已正确接收JSON数据。
  2. 发送端JSON编码未生效:wp_json_encode执行失败,导致$body仍为数组,被wp_remote_post自动转为表单数据格式,嵌套数组被识别为[object Object]。

排查与解决方案

步骤1:验证发送端的JSON编码是否正确

在执行wp_json_encode后添加调试代码,确认编码结果是否正常:

$body = [
 'stock_data'     => [
    'post_title'  => $title,
    'post_content' => $content,
    'post_date' => $postdate,
    'post_category' => $categoryname
 ]];

$body_json = wp_json_encode($body);
// 调试:输出编码后的JSON字符串
var_dump($body_json);
exit;
  • 如果输出为false:说明JSON编码失败,检查$title、$content等变量是否包含无法编码的类型(如资源对象、循环引用),将其转为字符串或可序列化类型。
  • 如果输出是结构正确的JSON字符串(如{"stock_data":{"post_title":"xxx",...}}):说明发送端编码正常,问题出在端点。

步骤2:验证端点接收的原始数据

在端点代码中输出原始请求内容,确认是否收到正确的JSON:

  • PHP端点:
// 输出原始请求体
echo file_get_contents('php://input');
exit;
  • Node.js/Express端点:
// 需先配置raw-body中间件或直接读取原始请求体
console.log(req.rawBody.toString());
res.end(req.rawBody.toString());

如果原始数据是正确的JSON,说明端点接收正常,问题出在数据处理环节。

步骤3:修正端点的数据处理逻辑

如果端点已正确接收JSON,需解析后访问嵌套属性,而非直接输出整个对象:

  • PHP端点:
$raw_data = file_get_contents('php://input');
$decoded_data = json_decode($raw_data, true);
// 访问嵌套属性,而非直接输出整个stock_data对象
echo "post_title: " . $decoded_data['stock_data']['post_title'];
  • Node.js/Express端点:
app.post('/your-endpoint', express.json(), (req, res) => {
  // 访问嵌套属性
  console.log('post_title:', req.body.stock_data.post_title);
  res.send('Received: ' + req.body.stock_data.post_title);
});

步骤4:优化发送端代码

去掉无用的data_format参数(仅对数组类型的body生效),并添加编码错误检查:

$body = [
 'stock_data'     => [
    'post_title'  => $title,
    'post_content' => $content,
    'post_date' => $postdate,
    'post_category' => $categoryname
 ]];

$body_json = wp_json_encode($body);
if ($body_json === false) {
    wp_die('JSON编码失败:' . json_last_error_msg());
}

$options = [
    'body'        => $body_json,
    'headers'     => [
        'Content-Type' => 'application/json',
    ],
    'timeout'     => 60,
    'redirection' => 5,
    'blocking'    => true,
    'httpversion' => '1.1', // 推荐使用HTTP/1.1协议
    'sslverify'   => false,
];

wp_remote_post($endpoint, $options);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 04:24:47