Laravel:如何在视图 blade 中解析此 json 数据?

Laravel: How do I parse this json data in view blade?

目前这是我的观点

{{ $leads }}

这是输出

{"error":false,"member":[{"id":"1","firstName":"first","lastName":"last","phoneNumber":"0987654321","email":"email@yahoo.com","owner":{
"id":"10","firstName":"first","lastName":"last"}}]}

我想展示这样的东西

Member ID: 1
Firstname: First
Lastname: Last
Phone: 0987654321

Owner ID: 10
Firstname: First 
Lastname: Last

在控制器中只需使用 json_decode php 函数将 json 数据转换为 object

$member = json_decode($json_string); 

and pass to view in view

return view('page',compact('$member'))

可见blade

Member ID: {{$member->member[0]->id}}
Firstname: {{$member->member[0]->firstname}}
Lastname: {{$member->member[0]->lastname}}
Phone: {{$member->member[0]->phone}}

Owner ID: {{$member->owner[0]->id}}
Firstname: {{$member->owner[0]->firstname}}
Lastname: {{$member->owner[0]->lastname}}

这很容易。 首先发送到视图解码变量(见Laravel Views):

view('your-view')->with('leads', json_decode($leads, true));

然后只需使用常见的 blade 结构(参见 Laravel Templating):

@foreach($leads['member'] as $member)
    Member ID: {{ $member['id'] }}
    Firstname: {{ $member['firstName'] }}
    Lastname: {{ $member['lastName'] }}
    Phone: {{ $member['phoneNumber'] }}

    Owner ID: {{ $member['owner']['id'] }}
    Firstname: {{ $member['owner']['firstName'] }} 
    Lastname: {{ $member['owner']['lastName'] }}
@endforeach

您可以使用 json 解码然后得到 php 数组,并按照您自己的方式使用该值

<?php 
$leads = json_decode($leads, true);
dd($leads);

对我来说,最重要的是获取一个 object,对其进行编码,然后将字符串传递到 javascript script 标记中。为此,您必须进行一些替换。

首先将每个 \ 替换为双斜杠 \,然后将每个引号 " 替换为 \"

$payload = json_encode($payload);
$payload = preg_replace("_\\_", "\\\", $payload);
$payload = preg_replace("/\"/", "\\"", $payload);
return View::make('pages.javascript')
  ->with('payload', $payload)

然后在blade模板中

@if(isset($payload))
<script>
  window.__payload = JSON.parse("{!!$payload!!}");
</script>
@endif

这基本上允许您在 php 侧取一个 object,然后在 javascript 侧取一个 object。

只需删除 $ 到压缩方法中,
return 视图('page',紧凑('member'))

如果您的数据来自模型,您可以执行以下操作:

App\Http\Controller\SomeController

public function index(MyModel $model)
{
    return view('index', [
        'data' => $model->all()->toJson(),
    ]);
}

index.blade.php

@push('footer-scripts')
  <script>
    (function(global){
      var data = {!! $data !!};
      console.log(data);
      // [{..}]
    })(window);
  </script>
@endpush

看来你可以使用@json($leads) 因为laravel 5.5

https://laravel.com/docs/5.5/blade

对于这种情况,你可以这样做

@foreach (json_decode($leads->member) as $member)
     {{ $genre }}
@endforeach

示例,如果你有这样的数组格式:

$member = [
    [ "firs_name" => "Monica",
      "last_name" => "Dev",
      "sex" => "F"
    ],
    [ "firs_name" => "Blake",
      "last_name" => "Devante",
      "sex" => "M"
    ],
    [ "firs_name" => "Johnny",
      "last_name" => "Merritt",
      "sex" => "M"
    ]
]

您可以使用 @json Blade 指令 Laravel 5.5 到 9.x

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

从 Laravel 8.x 到最新版本,您可以使用 Illuminate\Support\Js::from 方法指令。

<script>
var app = {{ Illuminate\Support\Js::from($member) }};
</script>

并简称为Js门面

<script>
var app = {{ Js::from($array) }};
</script>

参考:

https://laravel.com/docs/blade