laravel 获取要传递给 laravel blade 但采用 json 格式的数据

laravel get data to pass to laravel blade but in json format

我有数据表明我正在使用 d3.js 创建图表。我让那部分工作对数据进行硬编码

var data = {
            "name": ["A", "B", "C", "D", "E"],
            "vals": [48, 35, 34, 21, 11]
        }

我苦苦挣扎的地方是将数据输入我的 blade 模板的 javascript 部分。我试图对以下内容进行硬编码,我得到一个 htmlspecialchars() 期望参数 1 为字符串,object 给定。

$test = json_encode([
            "name" => ["A", "B", "C", "D", "E"],
            "vals"=> [48, 35, 34, 21, 11]
        ]);

在脚本区用这个blade

var test = {{json_decode($test)}};

如果我不这样做 json_decode 我不会收到错误,但它会将我的 " 转换为 ",这显然是行不通的。

我知道我只是遗漏了一些东西来让它工作,但也许我会做一个新方法并做一个 ajax 调用来获得它。

任何想法或提示都会有所帮助

您需要输出未转义的值 - var test = {!! $test !!}.

如果您从数据库或模型中获取值,您可以考虑使用 toJson() 帮助器。

简单地使用未转义的输出:

<script>
    var array = {!! json_encode($array) !!};
</script>

或者

<script>
    var array = @json($array);
</script>

PHPStorm 中的两种变体都会突出显示此行并显示错误 - 应为表达式

所以,我的完整答案是:

<script>
    var array = [].concat(@json($array));
</script>

@fubar 的解决方案对我有用。一个小小的改变。解决方案 @json($geoJson) 没有。但那是因为我没有将数组放入函数中,而是已经是一个字符串。我不得不为我扩展@fubar 的方法:

const data = JSON.parse(' {!! $geoJson !!} ');
console.log('data', data);

单引号很重要。