Laravel 8中json_encode传二维数组到Blade JS时变一维如何解决
问题原因
PHP的json_encode函数默认会将键为从0开始的连续数字的索引数组转换为JSON数组,其余情况(索引不连续、键为字符串)都会转换为JSON对象。你遇到的输出为{"0": {...}}的情况,本质是原PHP数组的索引不是连续从0开始的,所以被识别为关联数组转为了JSON对象。
解决方法
- 首先移除代码中包裹
json_encode返回值的单引号:json_encode输出的结果本身就是合法的JS字面量,套单引号会直接将其转为字符串,无法作为数组/对象使用。 - 输出前用
array_values()重置数组索引,确保数组键为从0开始的连续数字,这样json_encode就会自动输出JSON数组:
slidersAdImageKeys: {!! json_encode(array_values($slidersAdImageKeys)) !!},
- 如果需要额外处理转义问题,可以添加对应的flag参数,比如保留中文、不转义斜杠:
slidersAdImageKeys: {!! json_encode(array_values($slidersAdImageKeys), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) !!},
Laravel专属简化写法
Laravel 8 提供了原生的@json Blade指令,不用手动写{!! !!},安全性更高:
slidersAdImageKeys: @json(array_values($slidersAdImageKeys)),
需要传flag的话直接作为第二个参数传入即可:
slidersAdImageKeys: @json(array_values($slidersAdImageKeys), JSON_UNESCAPED_UNICODE),
内容的提问来源于stack exchange,提问作者mstdmstd
相关产品推荐
相关产品推荐

