如何通过 Postman 以 JSON 格式在请求正文中发送对象数组?

Posted

技术标签:

【中文标题】如何通过 Postman 以 JSON 格式在请求正文中发送对象数组?【英文标题】:How to send array of objects within request body in JSON format via Postman? 【发布时间】:2019-09-17 08:36:25 【问题描述】:

我想通过邮递员发送对象数组来测试我的 API 函数 当我以 JSON 格式将请求发送到函数然后循环遍历数组以访问每个对象属性时,它给了我以下错误: https://i.imgur.com/QV9MDsm.jpg

这是我的要求: https://i.imgur.com/4584wf3.jpg

我搜索了如何使用邮递员发送一组对象,发现我的做法是正确的 我选择了正文部分下的行,以便我可以添加我的请求正文并将其格式选择为 JSON,并将“Content-Type:application/json”添加到请求标头

我的 API 函数:

public function createRetailer(Request $request)
    $machines = $request->machineInfo;

    foreach($machines as $machine)
        $newMachine = new Machine;
        $newMachine->machine_no = $machine->machineNo;
        $newMachine->account_type = $machine->accountType;
        $newMachine->machine_type = $machine->machineType;
        $newMachine->retialer_id = $retailer->retailerId;
        $newMachine->save();
    

我希望我可以将每个数组对象属性作为 php 对象访问,但我发现它不是一个对象,通过使用 is_object() 函数对其进行测试:

public function createRetailer(Request $request)
    $machines = $request->machineInfo;

    foreach($machines as $machine)
        return response()->json(is_object($machine));
    

我不知道问题出在我的请求中,还是我在控制器函数中检索请求数据时可能误解的问题

【问题讨论】:

您可以在调试方法的顶部添加return dd($request->machineInfo) 吗?作为猜测,我认为您应该 json_decode() 数组的每个元素,或者将其属性作为数组访问 $machine['machineNo'] 响应是数组数组:array:1 [ 0 => array:4 [ "machineNo" => "123456" "accountType" => "Paid" "machineType" => "hb3br238rhi" "retailerId" => "1" ] ] 当我尝试使用 json_decode() 时,它响应错误:json_decode() 期望参数 1 是字符串,给定数组 【参考方案1】:

要么是一个数组,在这种情况下,你可以调用

$object = (object) $machine;

或者它是一个字符串,也就是 JSON,你可以调用

$object = json_decode($machine);

或者如果它是一个对象/数组使用

$machine['machineType'];

另外请添加 $machine var 的转储

编辑

尝试不使用 [] 发送请求,因为它们将被转换为其中包含对象的数组,相反,如果您删除 [] 并且只有 它应该只是请求中的一个对象

"machineInfo" : 
    "machineNo" : "1123213",
    "accountType" : "Paid",
    //...rest here..

试试这个:

 public function createRetailer(Request $request)
    $machines = $request->machineInfo;

    foreach($machines as $machine)
        $object = (object) $machine;
        return response()->json(is_object($object));
    

【讨论】:

我认为最后一个选项被接受但我不明白我认为在这种情况下语法看起来像是在处理一个数组而不是一个对象,尽管在请求中我将它作为对象发送 @KareemSaeed 更新答案认为这是因为您将对象包装在 [] 中,它成为数组中的一个对象,而不仅仅是一个对象,因此当收到请求时,它是一个数组而不是一个对象 我希望它是一个对象数组,而不仅仅是一个对象 @KareemSaeed 有点猜测,没有转储 $request->machineInfo;和 $machine 的一次迭代;但更新了我认为问题所在的答案.. 我认为将每个数组变量作为对象而不是数组来处理,你的最后一个答案是最被接受的【参考方案2】:

由于您的请求将数据作为数组发送,因此您可以这样访问元素:

public function createRetailer(Request $request)
    $machines = $request->machineInfo;

    foreach($machines as $machine)
        $newMachine = new Machine;
        $newMachine->machine_no = $machine['machineNo'];
        $newMachine->account_type = $machine['accountType'];
        $newMachine->machine_type = $machine->['machineType'];
        $newMachine->retialer_id = $retailer->['retailerId'];
        $newMachine->save();
    

【讨论】:

为什么虽然请求被写为对象数组,但它以数组形式发送数据? 您的对象数组被 Laravel 解析为一个数组数组,具有键/值映射,如上所述使用它提供了所需的行为,您可以访问每个 @ 的每个属性的数据987654322@ 作为一个数组。如果你想把它作为一个对象,你可以简单地在你的循环中添加json_encode($machine)

以上是关于如何通过 Postman 以 JSON 格式在请求正文中发送对象数组?的主要内容,如果未能解决你的问题,请参考以下文章

如何指定postman请求的字符编码

Postman 使用外部 Json 格式文件批量调用接口

如何在 Postman Collection 中指定 JSON 请求正文示例

postman发送json格式的post请求

postman发送json格式的post请求

postman发送json格式的post请求