【问题标题】:Decode JSON from server in laravel在 laravel 中从服务器解码 JSON
【发布时间】:2020-05-12 10:54:56
【问题描述】:

我有一个需要解码的 JSON 文件,因为它有 {"Text",然后是我发送的实际消息,在我的数据库中它存储在 "content" 下。我正在尝试对其进行解码以在我的表中包含干净的数据。

我试图让我的控制器对其进行解码,但它似乎没有做任何事情,也没有给我一个错误。我附上了一张照片,所以你可以明白我的意思。我的控制器没有出现任何错误,但它似乎也没有任何效果。我需要在我的控制器中定义变量内容,但是如果我从返回视图详细信息,消息 => $message 更改为详细信息,内容 => 内容我得到非对象错误(因为解码它现在是一个数组)。

我的控制器:

<?php

namespace App\Http\Controllers;

use App\Message;
use App\Suggestion;
use Carbon\Carbon;
use Google\Auth\ApplicationDefaultCredentials;
use Google\Cloud\PubSub\PubSubClient;
use GuzzleHttp\Client;
use GuzzleHttp\HandlerStack;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;
use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Storage;
use Propaganistas\LaravelPhone\PhoneNumber;

class DetailsController extends BaseController
{
    public function index($id)
    {

        $message = Message::find($id);
        $content = json_decode($message->content,TRUE);

        return view('details', ['message' => $message]);

    }
}

`

我的 Blade 文件只是一个表格,其中最重要的部分是:

<td>{{$message->type}}</td>
<td>{{$message->content}}</td>
<td>{{$message->response}}</td>
<td>{{$message->id}}</td>

一旦我可以将它转换成一个数组,我就可以将它分解成更可敬的列,我附上了 UI 的图像,这样你就可以看到我正在尝试做什么

UI image showing where content is

【问题讨论】:

  • 什么在起作用/什么不起作用/你想做什么?
  • 我会整理我的问题,我想解码 JSON 文件,以便它显示表格内的数据分隔而不是所有的 { 和 [
  • 这行$body = json_decode($response-&gt;getBody(),true);有问题吗? $response-&gt;getBody() 部分似乎是错误的,这些数据来自哪里?您在此之前的行上有一个return,因此不会执行此代码。
  • 我认为这就是问题所在,数据来自 Google API,它创建 JSON 并将其存储在我通过 XAMPP 托管的 MYSQL DB 中,表是 Messages 并且有一个名为内容的字段,这是值的来源
  • 我需要做的是将它们从数据库中提取出来,例如:"{"text":"message","suggestions":[{"reply":{"text": "test"}",解码为消息,测试

标签: php laravel


【解决方案1】:

我正在查看您附加的图像,您似乎想在列上显示原始 JSON。如果是这种情况,则无需对其进行解码。保持 content 不变,并将 $mesage 传递给视图。

在下面检查我的代码:

    public function index($id)
    {
        $message = Message::find($id);
        return view('details', ['message' => $message]);
    }

无需更改模板。

<td>{{$message->type}}</td>
<td>{{$message->content}}</td>
<td>{{$message->response}}</td>
<td>{{$message->id}}</td>

【讨论】:

  • 志同道合,这和我来的一样。问题是我试图从谷歌而不是我更改它的数据库中提取它,以便我使用$message = Message::find($id); $content = json_decode($message-&gt;content,TRUE); print_r($content); return view('details', ['message' =&gt; $message]); } } 的数据库
  • 这种情况下不应该是return view('details', ['content' =&gt; $content]); } }?
  • 不,它仍然加载 return view('details', ['message' =&gt; $message]); 但是运行时没有实现更改 return view('details', ['content' =&gt; $content]); 它给出了一个未定义的变量错误,你知道是否需要对刀片进行任何更改这行得通?如果是这样呢? `
  • 返回视图return view('details', ['content' =&gt; $content]);是一个不可达语句问题
  • 模板上的变量名应该和你在view()上定义的名字一致。在这种情况下&lt;td&gt;{{$content-&gt;type}}&lt;/td&gt;.
猜你喜欢
  • 2021-12-04
  • 1970-01-01
  • 2017-10-04
  • 1970-01-01
  • 2014-01-02
  • 2015-08-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多