簡體   English   中英

使用 cURL 在 PHP 中發布嵌套數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM