You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 01:05:19