【问题标题】:Decode json data to array and access the array in PHP(Laravel)将json数据解码为数组并在PHP(Laravel)中访问数组
【发布时间】:2018-03-16 16:47:33
【问题描述】:

我正在尝试以 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());. 可能是空的
  • 向我们展示 $data,以便我们查看您的数组
  • 您的请求正文不是有效的 json
  • $request->getContent() 返回的内容。它是 JSON 编码的字符串吗?此外,您确定您的 JSON 编码字符串始终具有您尝试访问的上述属性吗?

标签: php arrays json laravel-5


【解决方案1】:

解决方案:

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

发布我使用的数据

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

而不是

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

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

【讨论】:

    【解决方案2】:

    这是一个更 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 输入值)

    【讨论】:

      【解决方案3】:

      只需像这样在json_decode 之后访问您的数据,无需第二个参数。

      $data->info->q_title
      

      并通过将第二个参数设置为 true,这会将您的对象转换为数组。

      $data = json_decode($request->getContents(),true) //then use
      $data['info']['q_title']
      

      如果您在 $request->getContents() 中没有收到任何内容,那么问题在于您发送的请求。

      另外,查看这两个链接以了解如何检索 JSON 有效负载

      Laravel 5: Retrieve JSON array from $request

      Posting JSON To Laravel

      【讨论】:

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

      也许$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()。 @尼奥丹
      猜你喜欢
      • 2013-02-09
      • 1970-01-01
      • 2015-02-26
      • 2015-01-18
      • 1970-01-01
      • 2018-09-07
      • 1970-01-01
      • 2023-02-04
      • 2019-02-18
      相关资源
      最近更新 更多