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

烈酒焚心 提交于 2019-11-26 10:59:24

问题


Currently this is my view

{{ $leads }}

And this is the output

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

I wanted to display something like this

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

Owner ID: 10
Firstname: First 
Lastname: Last

回答1:


It's pretty easy. First of all send to the view decoded variable (see Laravel Views):

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

Then just use common blade constructions (see 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



回答2:


it seems you can use @json($leads) since laravel 5.5

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




回答3:


You can use json decode then you get php array,and use that value as your own way

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



回答4:


in controller just convert json data to object using json_decode php function like this

$member = json_decode($json_string); 

and pass to view in view

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

in view 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}}



回答5:


The catch all for me is taking an object, encoding it, and then passing the string into a javascript script tag. To do this you have to do some replacements.

First replace every \ with a double slash \\ and then every quote" with a \".

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

Then in the blade template

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

This basically allows you to take an object on the php side, and then have an object on the javascript side.




回答6:


For such case, you can do like this

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



回答7:


Just Remove $ in to compact method ,
return view('page',compact('member'))




回答8:


If your data is coming from a model you can do:

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


来源:https://stackoverflow.com/questions/30073065/laravel-how-do-i-parse-this-json-data-in-view-blade

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!