数据库json列返回laravel blade

时间:2015-05-12 14:38:15

标签: mysql json laravel-5 blade

我在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()提供的参数无效

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

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

json_encode($json_backup, JSON_UNESCAPED_SLASHES)

HTH

答案 1 :(得分:0)

此错误发生在第二个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);

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