将JSON数据解码为数组并在PHP(Laravel)中访问该数组

6

我正在尝试以JSON格式提交表单输入。在将JSON数据解码为数组后,我无法访问该数组。

{
    "info": {
        "q_title": "hello",
        "q_description": "ddd",
        "q_visibility": "1",
        "start_date": "Thu, 05 Oct 2017 06:11:00 GMT"
    }
}

这是我的JSON数据。我的Laravel控制器如下:

public function store_quiz(Request $request)
    {
        $data = json_decode($request->getContent(), true);

        $input = $arrayName = array(
            'title' => $data["info"]["q_title"], 
        );

        CreateQuiz::create($input);

        $redirect = '/';
        return $redirect;
    }

很遗憾$data["info"]["q_title"]返回NULL。如何访问我的JSON的“q_tittle”?


你能打印出print_r() $request->getContent());吗?也许它是空的。 - Vision Coderz
展示一下你的$data,这样我们就能看到你的数组了。 - Stender
您的请求体不是有效的 JSON。 - user2659982
$request->getContent() 返回什么?它是 JSON 编码的字符串吗? 此外,您确定您尝试访问的 JSON 编码字符串始终具有上述属性吗? - Yaman Jain
4个回答

4

只需在json_decode后直接访问您的数据,无需第二个参数。

$data->info->q_title

使用第二个参数为true,可以将您的对象转换为数组。
$data = json_decode($request->getContents(),true) //then use
$data['info']['q_title']

如果在$request->getContents()中没有得到任何内容,则问题在于您发送的请求。此外,请查看以下两个链接以了解如何检索JSON有效负载:

Laravel 5:从$request中检索JSON数组

将JSON发布到Laravel


不知道为什么我会得到-2。 - Dhaval Purohit
@Dhaval.he 给出了 true,因此当为 TRUE 时,返回的对象将被转换为关联数组。这可能是被投票否决的原因。 - Vision Coderz
@DhavalPurohit请查看文档http://php.net/manual/en/function.json-decode.php (-; - Neodan
好的,那么问题应该出在 $request->getContent() 上了。@iCoders - Dhaval Purohit
不确定。所以$data的输出只有我们可以决定。如果没有看到代码和输出,我无法发表任何评论。 - Vision Coderz

1
也许 $request->getContent() 的内容与您的示例不同,因为对我来说它有效。
尝试检查一下 $request->getContent() 中有什么。
示例:
<?php
$source = '{
    "info": {
        "q_title": "hello",
        "q_description": "ddd",
        "q_visibility": "1",
        "start_date": "Thu, 05 Oct 2017 06:11:00 GMT"
    }
}';
$data = json_decode($source, true);
echo $data['info']['q_title'];

是的。实际上问题出在 $request->getContent() 上。@Neodan - Md Omar Faruk

0

解决方案:

我的数据保存在 jQuery 中的 var data 中。

为了发布数据,我使用了

$.ajax({  .... data: {data: data} .... });

替代

 $.ajax({  .... data: data .... }); 

所以我从$request->getContent()得到了意外的值。


-1

这是一种更符合 Laravel 风格的方法:

public function store_quiz(Request $request)
{
    $input = $arrayName = array(
        'title' => $request->input('info.q_title'), 
    );

    CreateQuiz::create($input);

    $redirect = '/';
    return $redirect;
}

请确保您的JavaScript应用程序将Content-Type头设置为application/json。 Laravel将为您json_decode()


来源: https://laravel.com/docs/5.5/requests (获取JSON输入值)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接