使用cURL在PHP中发布嵌套数组
我需要将一些数据发布到一个端点,该端点是一个嵌套数组,如:使用cURL在PHP中发布嵌套数组,php,json,curl,deserialization,Php,Json,Curl,Deserialization,我需要将一些数据发布到一个端点,该端点是一个嵌套数组,如: $contentPostData = array( 'contents' => array( 'name' => $comment_text, 'fingerprint' => $fingerprint, 'signers' => array( $owne
$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\u encode($contentPostData);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
我发现您调用的Web服务使用的是com.fasterxml.jackson
,因此很可能需要JSON格式,因此您的序列化应该可以(如果字段名和类型匹配)
我还建议设置标题以通知webservice您正在发送json文件(如果它允许其他格式):
因此:
$data=json\u encode($contentPostData);
curl_setopt($ch,CURLOPT_HTTPHEADER,数组(
'内容类型:应用程序/json'
);
curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
如果这不起作用,那么最有可能的情况是:a)您的JSON无效(需要不同的结构)或b)Web服务实际需要的格式与JSON不同(例如,可能是标准的多部分数据)您的POST数据位于
$contentPostData
中,您对其进行JSON编码,但不存储结果,然后发布一个完全不同的变量,名为$data
?是的,我正在做$data=json\u encode($contentPostData);curl_setopt($ch,CURLOPT_POSTFIELDS,$data)代码>另外,在执行curl之前,我已经在标题中设置了内容类型:application/json。您有关于该web服务的预期输入的文档吗?
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json'
);