【问题标题】:Printing nested json data in Laravel view在 Laravel 视图中打印嵌套的 json 数据
【发布时间】:2017-06-24 02:24:57
【问题描述】:

下面是控制器返回给视图的Json

JSON 数据

   [  
       {  
          "id":2,
          "firstname":"abc",
          "lastname":"def",
          "email":"abc@ab.ac.uk",
          "role":1,
          "university":1,
          "school_dept":5,
          "year":2,
          "photo":"URL",
          "bio":"ObxBJIDO6IfOU0DIw8a5",
          "search_status":"available",
          "created_at":null,
          "updated_at":null,
          "languages":[  
             {  
                "id":3,
                "language":"Spanish",
                "pivot":{  
                   "user_id":2,
                   "language_id":3,
                   "type":"native"
                }
             },
             {  
                "id":4,
                "language":"Greek",
                "pivot":{  
                   "user_id":2,
                   "language_id":4,
                   "type":"learn"
                }
             }
          ],
          "hobbies":[  
             {  
                "id":2,
                "hobby":"Basketball",
                "pivot":{  
                   "user_id":2,
                   "hobbie_id":2
                }
             },
             {  
                "id":3,
                "hobby":"Skiing",
                "pivot":{  
                   "user_id":2,
                   "hobbie_id":3
                }
             },
             {  
                "id":4,
                "hobby":"Running",
                "pivot":{  
                   "user_id":2,
                   "hobbie_id":4
                }
             }
          ],
          "universities":{  
             "id":1,
             "university":"some Uni"
          },
          "years":{  
             "id":2,
             "year":"2nd"
          },
          "departments":{  
             "id":5,
             "department":"Languages and Intercultural Studies"
          }
       }
    ]

我能够提取 id、名字、姓氏、电子邮件、... 一级数据

@foreach($users as $user)
 <tr>
      <td>{{$user->firstname}} </td>
      <td>{{$user->lastname}} </td>
      <td>{{$user->email}} </td>
      <td>{{$user->photo}} </td>
      <td>{{$user->bio}} </td>
      <td></td>
    </tr>

@endforeach

此外,系、大学和年份二级嵌套数据

<td>{{$user['universities']->university}} </td>
<td>{{$user['departments']->department}} </td>
<td>{{$user['languages']->language}} </td>
<td>{{$user['years']->year}} </td>

但是如何提取第三级嵌套数据以及它的一种数组。

例如:爱好和语言。

我想显示以下语言:learn : Englishteach: French 这必须通过检查 type 字段是在语言数组中是 learn 还是教称为类型的字段。它告诉用户是否想学习特定语言或教授该语言。所有用户都学习和教授这两种类型。

此外,对于爱好列表,例如:hobby1、hobby2、hobby3、...

我想展示这种最简洁有效的方式

以下是我试图显示 3 级数据的技术,但如果条件似乎不起作用。我需要根据类型获取语言。

@foreach($user->languages as $langs)
   @if($langs['pivot']->type =='native')
   <td>{{$langs['pivot']->language_id}}</td>
   @else
   <td>{{$langs['pivot']->language_id}}</td>
   @endif
@endforeach

【问题讨论】:

    标签: php json laravel-5 laravel-5.3


    【解决方案1】:

    我在 Laravel 中遇到了类似的问题来提取图像 url。但我不需要 for 循环。所以我想我发布了这个例子。

    天气 JSON。

    {
      "coord": {
        "lon": -97.29,
        "lat": 32.63
      },
      "weather": [
        {
          "id": 800,
          "main": "Clear",
          "description": "clear sky",
          "icon": "02d"
        }
      ],
      "base": "stations",
      "main": {
        "temp": 297.61,
        "pressure": 1007,
        "humidity": 36,
        "temp_min": 296.15,
        "temp_max": 299.15
      },
      "visibility": 16093,
      "wind": {
        "speed": 4.6,
        "deg": 200,
        "gust": 7.2
      },
      "clouds": {
        "all": 5
      },
      "dt": 1490813400,
      "sys": {
        "type": 1,
        "id": 2625,
        "message": 0.3809,
        "country": "US",
        "sunrise": 1490789980,
        "sunset": 1490834873
      },
      "id": 4689708,
      "name": "Everman",
      "cod": 200
    }
    

    在控制器中

        $restful_data=json_decode($res->getBody(), true);//to use in first and second level
        $restful_icon_array=$restful_data['weather']; //to use in third level
        $restful_icon = $restful_icon_array[0]; //second level is array
    
        return view('dashboard',['posts'=>$posts])
            ->with(['restful_data'=>$restful_data])//send array for second level
            ->with(['icon_weather'=>$restful_icon]);//send array for third level
    

    在视图中

     <p>{{$restful_data['coord']['lon']}}</p> //access to second level
     <img src="https://openweathermap.org/img/w/{{ $icon_weather['icon'] }}.png"> //access to third level
    

    【讨论】:

      【解决方案2】:

      你可以把json改成数组:

      $user = json_decode($jsonData, true);
      

      第一级:

      $user["firstname"];
      $user["lastname"];
      

      二级:

      $user["universities"]["university"];
      $user["departments"]["department"];
      

      第三级:

      foreach ($user["languages"] as $language) {
          if ($language["pivot"]["type"] == "native") {
              $language["language"];
          } else {
              $language["language"];
          }
      }
      

      【讨论】:

      • 你能展示如何根据类型获取语言吗?我想打印 if type = learn print language,即学习其他语言原生语言。怎么办,因为条件(类型)在枢轴之内,但值在枢轴之外但在语言之内。
      猜你喜欢
      • 2022-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-15
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多