如何在 Laravel 5 中处理嵌套的 JSON 对象请求?

Posted

技术标签:

【中文标题】如何在 Laravel 5 中处理嵌套的 JSON 对象请求?【英文标题】:How to handle nested JSON object request in Laravel 5? 【发布时间】:2016-06-03 12:33:13 【问题描述】:

我们在 Laravel 5 和 AngularJs/Ionic 中运行这个 web 服务来处理 web。当我们从 web(客户端)向 webservice(后端)发布请求时,我们传递了嵌套的 JSON 对象。我们在读取服务器端父对象下的所有子对象时遇到问题。


    "name": "test",
    "description": "test",
    "startdate": "2016-02-21T13:00:00.000Z",
    "enddate": "2016-02-23T13:00:00.000Z",
    "coach": 
        "uuid": "76fdd664-d830-11e5-9d46-00ffc9587cbc"
    ,
    "category": 
        "uuid": "771e6de4-d830-11e5-9d46-00ffc9587cbc"
    ,
    "useruuid": "76d65a2d-d830-11e5-9d46-00ffc9587cbc",
    "routines": ["775b2726-d830-11e5-9d46-00ffc9587cbc"]

这个 JSON 已经过验证,我还设法获得了基本的 JSON,例如名称、endate 等,但不是嵌套对象。

我们在 Laravel 5 中使用这样的东西:

$incomingdata = $request->json()->all();
$name = $incomingdata->name; // works
$startdate = $incomingdata->startdate; // works
$coach_uuid = $incomingdata->coach()->uuid; // didn't work !!!

我如何做到这一点?

【问题讨论】:

我对这里发生的事情感到很困惑。那么客户端是否将 JSON 发送到服务器? @OliverQueen:正确!客户端将带有嵌套对象的 JSON 数据发送到运行在 Laravel 5 上的服务器。 好的,我绝对建议使用json_decode() @OliverQueen :我对我的问题进行了调整以使其清楚。 print_r($incomingdata); 返回什么? 【参考方案1】:

你可以试试这个:

$phpArray = json_decode($jsonObject,true);
$name = $phpArray['name'];
$coach = $phpArray['coach'];
$coach_uuid = $phpArray['coach']['uuid'];
$category = $phpArray['category']; 
$category_uuid = $phpArray['category']['uuid]; 

【讨论】:

在 Laravel 5 中,有一种转换方法:使用 $request->json()->all();所以 $data = $request->json()->all();我可以通过 $data->name 或 $data->enddate 但不是嵌套对象 $data->coach->uuid 或 $data->category->uuid 轻松访问 我必须这样做才能工作:$coach_uuid = $incomingdata['coach']['uuid'];谢谢 !!!我认为 Laravel 有一种优雅的方式来实现这一点:)【参考方案2】:

我不知道 Laravel 5.0,但在 Laravel 5.6 中我必须做一些完全不同的事情。其他答案中的代码都不适合我。

这是我发现可以正常工作的:

$name = $request->input('name');
$startdate = $request->input('startdate');
$coach_uuid = $request->input('coach.uuid');
print_r($name.'<br />');
print_r($startdate.'<br />');
print_r($coach_uuid.'<br />');

以上打印:

test
2016-02-21T13:00:00.000Z
76fdd664-d830-11e5-9d46-00ffc9587cbc

参考:https://laravel.com/docs/5.6/requests#retrieving-input

【讨论】:

以上是关于如何在 Laravel 5 中处理嵌套的 JSON 对象请求?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 6 中存储和检索嵌套的 JSON 数组

如何获取嵌套在laravel中的json

Laravel:一次保存多个模型/ json嵌套输入

如何访问嵌套的 json 对象? |在 Laravel 电子商务项目中显示订单]

如何使用 laravel 或 mysql 创建嵌套的 json?

如何在 Laravel 5 的嵌套查询中使用 GroupBy?