Laravel 请求参数的问题

请求参数是

{
"a":{}
}

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

[
    "a":[]
]

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

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
最佳答案

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 -> 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年前

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年前 评论

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

3年前 评论

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