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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/30073065/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-03 17:52:57  来源:igfitidea点击:

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

jsonlaravelblade

提问by David Alrdrin

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

回答by Maxim Lanin

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

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

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

Then just use common blade constructions (see Laravel Templating):

然后只需使用常见的刀片结构(请参阅Laravel 模板)

@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

回答by mygeea

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

从 laravel 5.5 开始,您似乎可以使用 @json($leads)

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

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

回答by Imtiaz Pabel

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

您可以使用 json decode 然后获得 php 数组,并将该值用作您自己的方式

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

回答by Funkodebat

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

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

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.

这基本上允许您在 php 端获取一个对象,然后在 javascript 端获取一个对象。

回答by umefarooq

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

在控制器中,只需使用这样的 json_decode php 函数将 json 数据转换为对象

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

回答by Bijaya Kumar Oli

For such case, you can do like this

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

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

回答by Ahmed Mansour

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

只需将$in移除到 compact 方法,
返回 view('page',compact('member'))

回答by Gus

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

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

App\Http\Controller\SomeController

应用\Http\Controller\SomeController

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

index.blade.php

index.blade.php

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