[英]Posting a nested array in PHP using cURL
我有一些數據需要發布到一個端點,它是一個嵌套數組,例如:
$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);
我看到您正在調用的網絡服務使用com.fasterxml.jackson
所以很可能需要 JSON 格式,因此您的序列化應該沒問題(如果字段名稱和類型匹配)。
我還建議設置標頭以通知 webservice 您正在發送一個 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 不同的格式(例如,可能是標准的多部分數據)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.