Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用cURL在PHP中发布嵌套数组_Php_Json_Curl_Deserialization - Fatal编程技术网

使用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'                                                                     
);