David Alrdrin
David Alrdrin

Reputation: 471

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

Currently this is my view

{{ $leads }}

And this is the output

{"error":false,"member":[{"id":"1","firstName":"first","lastName":"last","phoneNumber":"0987654321","email":"[email protected]","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

Upvotes: 41

Views: 214553

Answers (8)

Sophy
Sophy

Reputation: 9275

Example if you have array format like this:

$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"
    ]
]

You can use @json Blade directive for Laravel 5.5 to 9.x

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

From Laravel 8.x to latest version you can use Illuminate\Support\Js::from method directive.

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

And for short with Js facade

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

Reference:

https://laravel.com/docs/blade

Upvotes: 12

Bijaya Kumar Oli
Bijaya Kumar Oli

Reputation: 2193

For such case, you can do like this

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

Upvotes: 15

Gus
Gus

Reputation: 7515

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

Upvotes: 2

Ahmed Mansour
Ahmed Mansour

Reputation: 7

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

Upvotes: 0

dansch
dansch

Reputation: 6267

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.

Upvotes: 6

Imtiaz Pabel
Imtiaz Pabel

Reputation: 5443

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);

Upvotes: 6

Maxim Lanin
Maxim Lanin

Reputation: 4531

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

Upvotes: 53

umefarooq
umefarooq

Reputation: 4574

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

Upvotes: 3

Related Questions