数据库json列在laravel刀片中返回转义字符串

Posted

技术标签:

【中文标题】数据库json列在laravel刀片中返回转义字符串【英文标题】:Database json column returning escaped string in laravel blade 【发布时间】:2015-07-23 12:26:09 【问题描述】:

我在 mysql 列中保存了一些 Json 数据。在将数据提取到 Laravel Blade 应用程序时,json 字段都被转义了。因此,我在读取 json 数据时遇到了问题。

[
  
    "id": "1",
    "json_backup": "\"id\":\"2\",\"organization_id\":\"1\",\"amount\":\"7800.00\",\"date\":\"2015-05-11\",\"created_at\":\"2015-05-11 07:20:45\",\"updated_at\":\"2015-05-11 07:20:45\"",
    "ip": "127.0.0.1",
    "created_at": "2015-05-12 12:21:16",
    "updated_at": "2015-05-12 12:21:16"
  
]

上例中的 json_backup 字段被转义。如何确保该字段不被转义。

获取数据的代码

$activity = Activity::find(1);

在视图中:

@foreach ($activities AS $activity)

       @foreach($activity->json_backup AS $order)

       @endforeach
@endforeach

错误:

为 foreach() 提供的参数无效

任何帮助将不胜感激。

【问题讨论】:

对不起。它不起作用。 【参考方案1】:

此错误出现在第二个foreach 部分。 请以这种方式尝试一下。

$json = json_decode($activity->json_backup, true);

这可行,但不能肯定地说。即使你有问题重构代码并使用以下代码创建一个类:

function escapeJsonString($value)  
    $escapers = array("\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c");
    $replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b");
    $result = str_replace($escapers, $replacements, $value);
    return $result;

简单地说

$json = escapeJsonString($activity->json_backup);

这个肯定行。希望这会有所帮助。

【讨论】:

【参考方案2】:

@saaz 在 MySQL 中存储 JSON 时,请使用

json_encode($json_backup, JSON_UNESCAPED_SLASHES)

HTH

【讨论】:

以上是关于数据库json列在laravel刀片中返回转义字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何从 laravel 刀片中的 json 数据创建分页链接

如何在 laravel 刀片模板中使用 JSON 数据进行模型绑定?

在 laravel 刀片中显示 JSON 数组

laravel 5.3 - 在刀片模板中显示来自 mysql 文本字段的 json 数据

在带有刀片模板的表单中使用 laravelcollective/html 时防止转义单引号

json中的输出对象,带有laravel刀片的单引号?