首页 > 解决方案 > JSON解码后在laravel中爆炸PHP

问题描述

我想分解我解码的 JSON,以便我可以删除间距并调用表格中的某些值。我有信心在第一次使用它后需要使用爆炸来实现我的目标,所以我不确定如何使用它

我的控制器是:

public function index($id)
{

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

    var_dump($content);

    explode(',',',{,},[,]');

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

我有一个标准表

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

我目前在控制器上有一个 vardump,所以我可以看到正在解析的内容(并测试我的解码是否正常工作)。它返回以下内容:

array(2) { ["text"]=> string(4) "test" ["suggestions"]=> array(1) { [0]=> array(1) { ["reply"]=> array(2) { ["text"]=> string(4) "test" ["postbackData"]=> string(36) "e05ad1f0-a0f8-4a56-a8c7-67f56ba9fe4c" } } } }

我想爆炸这个,所以我可以将它们中的每一个提取到我表中的不同列中

标签: phpjsonlaravel

解决方案


所以最好在这种情况下使用访问器。您可以在此处找到有关它们如何工作的文档https://laravel.com/docs/7.x/eloquent-mutators#defining-an-accessor

在我们的消息模型中

namespace App;

use Illuminate\Database\Eloquent\Model;

class Message extends Model
{

    public function getContentAttribute($value)
    {
        return json_decode($value);
    }
}

在你的控制器中

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

你的看法

<p>{{property_exists($message->content, 'text') ? $message->content->text:property_exists($message->content, 'log') ?  $message->content->log :property_exists($message->content, 'data')? $message->content->data: ""}}</p>

推荐阅读