Laravel Blade中如何循环展示JSON字段的指定值?
解决Laravel Blade循环展示JSON字段指定值的问题
你提供的JSON数据存在两个格式问题,这是json_decode失效的核心原因:
- 字符串外层多了一对双引号,导致解析器将整个内容识别为单个字符串而非数组
- 每个对象最后一个键值对末尾有多余逗号(比如
"size":28000,),属于无效JSON格式
步骤1:修复JSON格式
先把原始无效JSON转换成有效格式:
原始无效JSON:
"[{"type":"pllet-a","price_km":50,"size":28000,},{"type":"pellet-b","price_km":40,"size":20000,}]"
修复后:
[{"type":"pllet-a","price_km":50,"size":28000},{"type":"pellet-b","price_km":40,"size":20000}]
步骤2:在Laravel中处理并展示
方法一:控制器预处理(推荐)
在控制器中提前解析JSON,将数组传给视图:
// 假设从响应/数据库获取到的JSON字符串是$rawJson $rawJson = '[{"type":"pllet-a","price_km":50,"size":28000},{"type":"pellet-b","price_km":40,"size":20000}]'; // 转成关联数组,Blade中更易操作 $items = json_decode($rawJson, true); return view('your-blade-view', compact('items'));
在Blade视图中循环展示:
@foreach($items as $item) <p>{{ $item['price_km'] }} km</p> <!-- 可选:展示其他字段 --> {{-- <p>类型:{{ $item['type'] }},尺寸:{{ $item['size'] }}</p> --}} @endforeach
方法二:Blade内直接处理(应急方案)
如果无法在控制器处理,可在Blade中先清理无效格式再解析:
@php // 移除外层引号,同时去掉对象末尾的多余逗号 $cleanedJson = trim($yourJsonData, '"'); $cleanedJson = preg_replace('/,\s*}/', '}', $cleanedJson); $items = json_decode($cleanedJson, true); @endphp @if($items) @foreach($items as $item) <p>{{ $item['price_km'] }} km</p> @endforeach @else <p>暂无有效数据</p> @endif
方法三:模型访问器(数据库字段场景)
如果JSON是数据库存储的字段,可在模型中定义访问器自动解析:
// 对应模型文件中 public function getYourJsonFieldAttribute($value) { // 清理无效格式后解析 $value = trim($value, '"'); $value = preg_replace('/,\s*}/', '}', $value); return json_decode($value, true); }
之后在Blade中直接调用模型属性:
@foreach($modelInstance->your_json_field as $item) <p>{{ $item['price_km'] }} km</p> @endforeach
内容的提问来源于stack exchange,提问作者Happy Arif
相关产品推荐
相关产品推荐

