Laravel 请求参数的问题

请求参数是

{
"a":{}
}

$request->all()接收后变成了

[
    "a":[]
]

问:为什么a的参数变成了数组,我要怎么样才能接收到是对象?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
最佳答案

PHP中,json -> array 是通过 json_decode 来实现的,如果说你的参数是通过 applocation/json 的 body 传递的,直接通过 php://input 拿到 body,在再通过 json_decode 解析就可以了

$json = file_get_contents("php://input");
// 或者
$json = $request->getContent();
// {"a":{}}
$array = json_decode($json); 
// stdClass{
//     "a": stdClass{}
//}
3年前 评论
licxisky (作者) 3年前
licxisky (作者) 3年前
ytoz (楼主) 3年前
ytoz (楼主) 3年前
ytoz (楼主) 3年前
ytoz (楼主) 3年前
讨论数量: 6

PHP 里面是没有你说的这种对象的,你可以把上面的 JSON 字符串转数组看下是不是下面的结果。

你可以了解一下 PHP 数组和关联数组的相关基础知识。

3年前 评论
ytoz (楼主) 3年前
zxdstyle (作者) 3年前
ytoz (楼主) 3年前
ytoz (楼主) 3年前
zxdstyle (作者) 3年前
ytoz (楼主) 3年前
{
    a: {
         a: 1,
         b: 2
    }
}

以上写法在JS里面是一个对象,但是用 json_decode 转了之后 就是一个关联数组:

[
     a => [
          a => 1,
          b => 2
     ]
]

而 json_deocode 的第二个参数可以控制格式化为数组还是stdclass,正常大家都是使用的数组,如果你需要 stdclass 那就自己转一下,用中间件啊什么的都可以。这样说总明白了吧

3年前 评论
ytoz (楼主) 3年前
zxdstyle (作者) 3年前

先看看你转换来做啥,如果是处理数据肯定是用数组方便,如果是储存数据,他也会帮你自动变回json,所以也没啥必要转来转去,真要硬转就像楼上那位那样转json_encode json_decode

3年前 评论
  1. PHP 本身就这样。外部传个空对象接过来是个数组格式。可以打印 $_GET$_POST 看看是不是这么回事。
  2. 既然默认是这样那就只能自己加一步操作把他转成对象。如果数组操作觉得不够香的话。
3年前 评论

PHP中,json -> array 是通过 json_decode 来实现的,如果说你的参数是通过 applocation/json 的 body 传递的,直接通过 php://input 拿到 body,在再通过 json_decode 解析就可以了

$json = file_get_contents("php://input");
// 或者
$json = $request->getContent();
// {"a":{}}
$array = json_decode($json); 
// stdClass{
//     "a": stdClass{}
//}
3年前 评论
licxisky (作者) 3年前
licxisky (作者) 3年前
ytoz (楼主) 3年前
ytoz (楼主) 3年前
ytoz (楼主) 3年前
ytoz (楼主) 3年前

可以试一下 $request->getContent()

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!