2017-02-07 14 views
1

以下JSONは、印刷ネストされたJSONデータ

JSONデータ

私はIDを引くことができています
[ 
     { 
      "id":2, 
      "firstname":"abc", 
      "lastname":"def", 
      "email":"[email protected]", 
      "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" 
      } 
     } 
    ] 

を表示するために、コントローラからのファーストネーム、姓、電子メールを返され、... 最初でありますレベルのデータ

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

しかし、第3レベルのネストされたデータにそのタイプの配列を追加する方法。

例:趣味と言語の両方。

は、私のような言語を表示したい:学ぶ:英語教える:フレンチこれはタイプフィールドが習得したり、フィールドと呼ばれるタイプで言語配列に教えているかどうかをチェックすることによって達成されることがあります。ユーザーが特定の言語を習得したり、その言語を教えたりしたいかどうかを示します。すべてのユーザーは両方のタイプを学び、教えています。

また、のような趣味のリストについて:hobby1、hobby2、hobby3、...

私はこの最もneatest、可能な効率的な方法を示したいと思います以下

は私が技術でありますレベル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 

答えて

0

あなたは配列に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"]; 
    } 
} 
+0

あなたは、種類に応じて言語を取得する方法を表示することができます。私はtype =が他の言語のネイティブを学ぶための印刷言語を学ぶなら印刷したい。条件(タイプ)がピボットの内側にあるが、値がピボットの外側ではあるが言語の内側にあるために行う方法。 –

+0

私は第三レベルを編集します、それはあなたが欲しいものですか? –

1

画像URLを抽出するためにLaravelで同様の問題が発生していました。しかし、私はforループは必要ありませんでした。だから私はその事例を投稿すると思った。

Weather 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