在 Laravel 中发送带有 json 对象数据的 post 请求

Posted

技术标签:

【中文标题】在 Laravel 中发送带有 json 对象数据的 post 请求【英文标题】:Send post request with json object data in Laravel 【发布时间】:2021-10-07 04:07:06 【问题描述】:

我想在 Laravel 中使用 Http 外观发送请求,但我无法传递 json 对象数据,它必须只是数组。

Http::withHeaders(['Content-Type' => 'application/json'])->withOptions([
        'headers' => $coockie
    ])->post($this->policy_url . $address, json_encode($data));

我的数据变量值:

        $data = [
        "document" => [
            "customerId" => 1,
            "currencyId" => 1,
            "settlementPolicyId" => 8,
            "storeId" => 16,
            "documentPatternId" => 2,
            "items" => [
                [
                    "productId" => 193,
                    "unitId" => 2,
                    "quantity" => 1,
                    "storeId" => 16,
                    "TrackingFactor1" => "1214",
                    "PartTrackingFactorRef1" => 1053,
                    "TrackingFactorHasQuantity1" => true,
                    "TrackingFactorValue" => "‏test",
                    "fee" => 0
                ]
            ]
        ],
        "payments" => [
            [
                "key" => "Cash",
                "amount" => 445810,
                "attr" => []
            ]
        ]
    ];

错误:

TypeError Argument 2 passed to Illuminate\Http\Client\PendingRequest::post() must be of the type array, string given

【问题讨论】:

你能显示完整的代码 $data 包含什么以及你得到什么错误 @JohnLobo 是的,我添加了 您遇到了什么错误?最好先在邮递员中检查 api 是否适用于此数据。 @JohnLobo 错误:TypeError 参数 2 传递给 Illuminate\Http\Client\PendingRequest::post() 必须是数组类型,给定字符串 $data 必须是数组。您正在传递字符串,但根据您的问题 $data is array.may be you are modified $data before pass http 【参考方案1】:

您可以尝试使用withBody 方法

Http::withBody(json_encode($data), 'application/json')
    ->withOptions([
       'headers' => $coockie
    ])
    ->post($this->policy_url . $address);

【讨论】:

【参考方案2】:

在将json_encode($data) 发送到请求之前。

$myArray = json_encode($data);
 $finalData = explode(' ',$myArray);

【讨论】:

TypeError 参数 2 传递给 Illuminate\Http\Client\PendingRequest::post() 必须是数组类型,给定字符串, ErrorException explode(): 空分隔符 如果explode 不适合你使用 $ary = preg_split('//', $string, -1, PREG_SPLIT_NO_EMPTY);准备好你的字符串。希望它可以帮助你。

以上是关于在 Laravel 中发送带有 json 对象数据的 post 请求的主要内容,如果未能解决你的问题,请参考以下文章

无法在数据库 Laravel 中存储 Json 对象

Laravel 验证:必须是带有“json”规则的有效 JSON 字符串

将带有香草 Js 的数组从 Ajax 发送到 Laravel 控制器

json中的输出对象,带有laravel刀片的单引号?

使用 swift 在 Alamofire 中发送带有对象数组的 JSON 作为参数

Laravel - 从 JSON 数组创建对象以将其保存在 SQL 数据库中