使用wp_remote_post()发送嵌套JSON负载时数据异常求助
使用wp_remote_post发送嵌套JSON数组时,端点收到
stock_data: [object Object]的解决方法 问题原因分析
你遇到的问题大概率是以下两种情况之一:
- 端点数据处理错误:端点在输出嵌套对象时,直接将对象转为字符串,导致显示
[object Object],但实际已正确接收JSON数据。 - 发送端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
相关产品推荐
相关产品推荐

