Laravel 4 - 将 json 解码到视图中

Posted

技术标签:

【中文标题】Laravel 4 - 将 json 解码到视图中【英文标题】:Laravel 4 - decoding json into view 【发布时间】:2014-02-08 22:40:34 【问题描述】:

我最近一直在试验 Laravel 4,到目前为止,它使用起来很愉快。但是,我遇到了一个问题,不是 Laravel 4,而是我自己的无能。

我有一个包含 3 行和 4 列的数据库。例如,假设列是:

content_id, 内容类型, 内容数据, 时间戳

'content_data' 列包含一个由大约 4 个键值对组成的 JSON 编码数组。

当我从数据库中检索这些行(使用 Eloquent)并将数据传递到我的视图中时,如何将 JSON 解析到我的刀片模板中?

在搜索并参考 Laravel 文档后,我的想法是您不能,因此我尝试将 JSON 解码回控制器中的数组,然后将其传递到我的视图中。

到目前为止,我在课堂上尝试了以下方法:

<?php
class PageController extends \BaseController 

public function index()


    $data = Content::
        ->where('content_type', 1)
        ->get();

    foreach($data as $content)
    
        $items[] = json_decode($content->content_data);
    

    return View::make('pages.page2')
        ->with('data', $data)
        ->with('items', $items);


但是,在我的 Blade 模板中,当我运行一个 foreach 循环来遍历提取的行时,我尝试在第一个循环中运行另一个 foreach 循环,该循环遍历 $items 数组以提取它们的值,但因为它是一个循环内循环,我得到重复的 json 值。

我的刀片模板如下所示:

@extends('layouts.pages');

@section('content_body')
<h1>My <span>title</span></h1>

<div class="column col-1">
    <ul>
        -- loop through the database rows --
        @foreach($data as $row)

            -- loop through the json decoded values --
            @foreach($items as $item)

                 $item['title'] 

            @endforeach

        @endforeach
    </ul>
</div>
@stop

不确定我的解释是否正确,但基本上我只是希望能够在显示提取的数据库行的循环中解析我的 json 编码数组

我希望这对可以提供帮助的人有意义。

【问题讨论】:

试试$content-&gt;content_data = json_decode($content-&gt;content_data) 所以你的意思是在我的控制器中执行 foreach 循环,而不是将 json_decoded 值分配到 $items 数组中,我应该将它分配给 $content->content_data? 我试试,不知道是什么问题。 感谢您的尝试,但没有成功。它只检索最后一行的 $data_content 列,因此我将它放入数组中。 【参考方案1】:

使用Eloquent Accessor 根据需要转换数据。

/**
 * Eloquent accessor to transform our content_data column
 * from JSON to an array.
 * 
 * @param  string  $data  Original JSON data
 * @return array
 */
public function getContentDataAttribute($data)

    return json_decode($data);

然后您可以像往常一样通过$content-&gt;content_data 检索您的列,但它将被转换为一个数组。

您可以在将数据保存到该列时执行相反的操作,方法是将传递的数组转换为 JSON 编码的字符串,也可以使用 mutator。

【讨论】:

它工作得很好,虽然我确实花了一些时间来理解访问器的命名约定以及如何从 Blade 中访问我的数组,但我设法弄明白了。顺便说一句,您的代码中有一个小错字,返回应该是json_encode。非常感谢所有的贡献者。

以上是关于Laravel 4 - 将 json 解码到视图中的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 中解码 Json 对象并在 laravel 中应用 foreach 循环

response()->json 无法在 Laravel 中解码 [关闭]

在 Laravel 文件夹结构中存储 JSON 文件的位置

如何在 Laravel 中解码 JSON 对象

使用 JSON 解码 Laravel 检索特定数据

在 laravel 中解码和移动 base64 编码的图像