php - 使用 cURL 在 PHP 中发布嵌套数组
问题描述
我有一些数据需要发布到一个嵌套数组的端点,例如:
$contentPostData = array(
'contents' => array(
'name' => $comment_text,
'fingerprint' => $fingerprint,
'signers' => array(
$ownerAuthId
)
)
);
当我尝试:
json_encode($contentPostData);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
我得到错误:
string(518) "{"timestamp":1578447151168,"message":"Can't read request","details":["JSON parse error: Cannot deserialize instance of `java.util.ArrayList` out of START_OBJECT token; nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException
如何格式化 contentPostData 以便正确反序列化?
解决方案
你提到:
json_encode($contentPostData);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
但是您是否将编码的 json 分配给$data
? 我的意思是:你在做什么:
$data = json_encode($contentPostData);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
我看到您调用的 Web 服务com.fasterxml.jackson
很可能使用 JSON 格式,因此您的序列化应该没问题(如果字段名称和类型匹配)。
我还建议设置标头以通知 Web 服务您正在发送 json 文件(以防它允许其他格式):
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
);
所以:
$data = json_encode($contentPostData);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
如果这不起作用,那么很可能:a)您的 JSON 无效(需要不同的结构)或 b)Web 服务实际上需要与 JSON 不同的格式(例如,可能是标准的多部分数据)
推荐阅读
- javascript - 为什么 JS 不能在计算器应用程序中读取 value 属性?
- wordpress - 在 Wordpress 主题中更改模板目录
- javascript - 如何为不和谐的 js 解决问题(50/50 的机会踢成员)
- python - Pandas 根据多索引值替换 DataFrame 值
- asp.net-mvc - 如何捕获从 ASP.NET MVC wep api 返回的错误?
- android - React native 我无法构建发布获取 APK
- ruby-on-rails - 加载 Rails 应用程序时如何使用 Bootstrap
- r - 在R中查找指数的双倍时间的代码
- java - 使用字符串做数学
- tfs - 如何在不执行获取的情况下更改 TFS 文件夹映射?